社区
Java SE
帖子详情
急啊!今晚就要交了!一个关于用JPanel实现画板的问题
wangsj
2009-11-16 04:03:59
我们的编译原理实践作业,要求自动根据语法生成一棵语法树。我已经实现了,问题是要怎么才能在有限的画面上摆下一棵巨大的语法树。我采用了JScrollPane,并且设置了JPanel的setPreferredSize,的确扩大了画板空间,但是在我移动滚条时,出现的是按照边缘的像素不断延伸,而不是我想要的按照paintComponent()里面所设置的那样画。拜托各位大虾,这是什么原因啊??应该如何改正?
错误如下:
...全文
150
15
打赏
收藏
急啊!今晚就要交了!一个关于用JPanel实现画板的问题
我们的编译原理实践作业,要求自动根据语法生成一棵语法树。我已经实现了,问题是要怎么才能在有限的画面上摆下一棵巨大的语法树。我采用了JScrollPane,并且设置了JPanel的setPreferredSize,的确扩大了画板空间,但是在我移动滚条时,出现的是按照边缘的像素不断延伸,而不是我想要的按照paintComponent()里面所设置的那样画。拜托各位大虾,这是什么原因啊??应该如何改正? 错误如下:
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
你的图片不能正常显示
JAVA GUI自定义
JPanel
画板
背景
主要为大家详细介绍了JAVA GUI自定义
JPanel
画板
背景的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
如何在
JPanel
中显示图片
对于初学者来说,这还是不错的资源,这个源程序
实现
在面板中加载一些图片,还是不错的啊!!!
Java
实现
的五子棋
JavaSE
实现
的简单版五子棋 使用
JPanel
的
画板
画棋盘跟棋子 可以存盘和复盘(文件读写)
Java Swing 在
一个
JFrame框架中使用多个
JPanel
面板布局的方法(不同
JPanel
不覆盖)
Java Swing 在
一个
JFrame框架中使用多个
JPanel
面板布局的方法(不同
JPanel
不覆盖) 在最近的对Java Swing的学习中,按照要求对
一个
界面中添加不同功能且排布整齐的控件时,不同
JPanel
之间会产生覆盖,总结了
JPanel
添加且不进行覆盖的方法
实现
代码如下 public class
JPanel
TEST{ private JFrame jf; private
JPanel
jp,jp1,jp2; //若想要
实现
添加到同一JFrame中且不覆盖,不可直接添加,需要先将要添加
Java-
JPanel
布局(
画板
)
/设置面板背景颜色//设置面板尺寸//设置面板边界布局return jp;
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章