关于图形绘制的几个疑问

hanbaoju1982 2004-08-11 09:36:13
初学jfc,对几个可能引起绘制的函数不大明白:
1:pack()
这个函数的作用好像是重新调整组件的布局吧??它好像还会直接将调整好的面板重新绘制一下,这时调用的是那个函数呢??repaint()??
2:repaint()
调用组件的paint,或update函数,但在下面的程序中:
public class u {
public static void main(String[] args) {
final JFrame f = new JFrame("Add Example 2");
final Container cp = f.getContentPane();
cp.setLayout(new FlowLayout());
cp.add(new JButton("Left"));
cp.add(new JButton("Middle"));
cp.add(new JButton("Right"));

f.pack();
f.setVisible(true);

try {
Thread.sleep(5000);
} catch (Exception e) {
}

SwingUtilities.invokeLater(new Runnable() {
public void run() {
cp.add(new JButton("Middle Right"), 2);
f.repaint(); }
});
}
}
却没有将后来添加的按纽显示出来,难道必须调用pack()??
3:setSize
将上面的程序改以下
public class u {
public static void main(String[] args) {
final JFrame f = new JFrame("Add Example 2");
final Container cp = f.getContentPane();
cp.setLayout(new FlowLayout());
cp.add(new JButton("Left"));
cp.add(new JButton("Middle"));
cp.add(new JButton("Right"));

f.pack();
f.setVisible(true);

try {
Thread.sleep(5000);
} catch (Exception e) {
}

SwingUtilities.invokeLater(new Runnable() {
public void run() {
cp.add(new JButton("Middle Right"), 2);
f.setSize(500,500);
}
});
}
}

这时只是调整了f的大小而已,后来的按钮也没显示出来,请问这是为什么??
...全文
130 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lordofthering 2004-08-11
  • 打赏
  • 举报
回复
在add的后面调用:
cp.validate();
cp.repaint();
jackkui 2004-08-11
  • 打赏
  • 举报
回复
repaint()
方法其实是调用
paint()如果没有paint则调用
paintComponent。

pack和setSize不能够同时使用
组件setSize一般用于布局为空的情况
ntzls 2004-08-11
  • 打赏
  • 举报
回复
pack() == setSize(getPreferredSize());validate();

public void run() {
cp.add(new JButton("Middle Right"), 2);
f.pack();
}

public void run() {
cp.add(new JButton("Middle Right"), 2);
f.setSize(f.getPreferredSize());
f.validate();
}
hanbaoju1982 2004-08-11
  • 打赏
  • 举报
回复
看了一下关于validate90的介绍,是用来重新布置组件的子组件的,
但用pack()好象也能完成这样的功能,是不是
pack()和validate()+ repaint()的作用是相同的呢??
hfs1978 2004-08-11
  • 打赏
  • 举报
回复
我现在也正在做一个画图的程序,学习

62,614

社区成员

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

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