JAVA 图形界面编程问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 10:33:21
图形界面编程时,为什么有些时候,一定要把界面拖动或者拉伸一下,才能看到变化?
比如,以下程序,作用是测试 在弹出的对话框中单击鼠标,然后就会在上面添加一个按钮的了,可是点击了,没有马上看到添加上去的按钮,要拉伸一下对话框以后,那些已添加的按钮才会出现!为什么会这样?
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestAddButton extends JFrame{
private JPanel jpanel;
private int buttonCount;
public TestAddButton(){
init();
this.addMouseListener(new MouseAdapter(){

@Override
public void mouseClicked(MouseEvent e) {
addButton();
}

});
}
public void init(){
jpanel=new JPanel();
this.add(jpanel);
this.setSize(400,400);
}
public void addButton(){
jpanel.add(new JButton("按钮"+(buttonCount++)));
}
public static void main(St

在你按钮添加完之后使用updateUI()方法就可以了。
因为你那些按钮是画在jpanel上的,所以要使用那个组件的updateUI方法,即
jpanel.add(new JButton("按钮"+(buttonCount++)));
之后添加一句
jpanel.updateUI();
这样就能看到效果了。

给你说下调用次序你就知道了。
按缩进。
主函数
构造TestAddButton实例
init();
jpanel=new JPanel();
this.add(jpanel);
this.setSize(400,400);
注册鼠标事件监听
显示TestAddButton实例
然后在鼠标事件触发:
addButton
添加按钮的代码
结构明白了,下面就是哪出的问题。
你感觉明明添加了,却不显示。有些不是看API文档或书能知道的,就得自己做一做。
AWT中添加组件能直接看的见的。但在swing中未必。
swing和AWT很多东西有细节差距的。swing下的GUI,凡是更改了UI的,一定要repaint,这是个原则问题。
你的问题就在于以为添加了组件就一定显示。在swing中是不成立的。
而且,虽然awt添加组件能直接显示,但绘制一样不会自动更新的。
所以,凡是更改了UI的,一定要repaint。

添加完毕之后调用repaint()看看!