急啊!今晚就要交了!一个关于用JPanel实现画板的问题

wangsj 2009-11-16 04:03:59
我们的编译原理实践作业,要求自动根据语法生成一棵语法树。我已经实现了,问题是要怎么才能在有限的画面上摆下一棵巨大的语法树。我采用了JScrollPane,并且设置了JPanel的setPreferredSize,的确扩大了画板空间,但是在我移动滚条时,出现的是按照边缘的像素不断延伸,而不是我想要的按照paintComponent()里面所设置的那样画。拜托各位大虾,这是什么原因啊??应该如何改正?
错误如下:
...全文
150 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangsj 2009-11-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wgh166 的回复:]
创建一张图片,图片上是你要现实的内容,然后再drawImage就可以了
[/Quote]
嗯,后来我就是这样解决的。
牧牛人软件 2009-11-22
  • 打赏
  • 举报
回复
创建一张图片,图片上是你要现实的内容,然后再drawImage就可以了
wangsj 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhanglin8014 的回复:]
请问什么是双缓冲,这几天看别人的代码里也提到了这个。
不过不明白什么意思和用途?可以帮我讲讲吗?
[/Quote]
我也还在学,这次作业只能马马虎虎的交了,每次图片要更新必须点击一下画板。等我理解透了在和你说说吧,呵呵
zhanglin8014 2009-11-16
  • 打赏
  • 举报
回复
请问什么是双缓冲,这几天看别人的代码里也提到了这个。
不过不明白什么意思和用途?可以帮我讲讲吗?
wangsj 2009-11-16
  • 打赏
  • 举报
回复
有点思路了,应该要用到双缓冲
wangsj 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wangsj 的回复:]
回复各位,那个有异常的图我贴在我的相册里了,不知道为什么不能显示在帖子上,麻烦大家去看一下
[/Quote]
final JPanel panel = new JPanel(){
void drawBranch(GrammarAnalyzer.Node n,int level,Graphics g){
for (GrammarAnalyzer.Node child : n.siblingNodes) {
child.setNodeY(level*FLOOR);
g.drawString(child.sym.toString(), child.x, child.y+DOWN);
g.drawLine(n.x, n.y+SET_OFF+DOWN, child.x, child.y-SET_OFF+DOWN);
drawBranch(child,level+1, g);
}
}
public void paintComponent(Graphics g){
if (parser.grammarTree!=null) {
int level=0;
GrammarAnalyzer.Node root=parser.grammarTree.root;
g.drawString(root.sym.toString(), root.x, root.y+DOWN);
drawBranch(root,level+1, g);
//parser.grammarTree=null;
}
}
};
panel.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(final MouseEvent arg0) {
repaint();
}
});
panel.setPreferredSize(new Dimension(3000, 2000));
panel.revalidate();
//panel.setAutoscrolls(true);
//panel.setBorder(new TitledBorder(null, "Grammar Tree", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
panel.setBounds(341, 61, 3000, 2000);
getContentPane().add(panel);
final JScrollPane scrollPane = new JScrollPane();
//scrollPane.setPreferredSize(new Dimension(3000, 2000));
scrollPane.setBorder(new TitledBorder(null, "Grammar Tree", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setViewportView(panel);
scrollPane.setBounds(357, 58, 589, 579);
getContentPane().add(scrollPane);
littlemonster 2009-11-16
  • 打赏
  • 举报
回复
代码呢?
wangsj 2009-11-16
  • 打赏
  • 举报
回复
回复各位,那个有异常的图我贴在我的相册里了,不知道为什么不能显示在帖子上,麻烦大家去看一下
wangsj 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 stamp80 的回复:]
猜测一下,是不是在拖动滚动条的时候没有repaint
[/Quote]
我在JScrollPane中加了的,在mouseDrag事件中
bolins 2009-11-16
  • 打赏
  • 举报
回复
我看到了.看得非常清楚.
bolins 2009-11-16
  • 打赏
  • 举报
回复
我看到了.看得非常清楚.
icekay Song 2009-11-16
  • 打赏
  • 举报
回复
看不到你贴的代码....
stamp80 2009-11-16
  • 打赏
  • 举报
回复
猜测一下,是不是在拖动滚动条的时候没有repaint
closewbq 2009-11-16
  • 打赏
  • 举报
回复
你把你做的给我看看,我想看看这个巨大的树!
machiatto19881031 2009-11-16
  • 打赏
  • 举报
回复
你的图片不能正常显示

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧