回 帖 发 新 帖 刷新版面

主题:[讨论]求一个关于AWT组件重画的问题

我建立了个界面,在上面显示了几个按钮, 
我想通过点 上面的一个按钮来增加一个按钮,以前通过点按钮来改变字体,颜色啊,多可以实现,但是对于动态增加一个组件(如按钮)就不行。。 
代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class test2{
    public static void main(String []args){
        test2_Frame frame=new test2_Frame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.show();
    }
}
class test2_Frame extends JFrame{
    private JScrollPane sp=null;
    private JPanel p=null;
    private JTextArea textarea,textarea2;
    public test2_Frame (){
        textarea=new JTextArea("dddddddddddddd");
        textarea2=new JTextArea("1111111111111");
        textarea.setEditable(false);
        setSize(200,700);    
    
        
        JButton b1=new JButton("群组在线成员");
        b1.addActionListener(new Listener());  //通过点他来动态在p中增加按钮组建
        JButton b2=new JButton("群组在线成员22");
        p=new JPanel();
        
        p.setLayout(new GridLayout(100,1));
        p.add(textarea2);
        p.add(b2);
        p.add(b1);
        sp=new JScrollPane(p);  //滚动面板中显示面板P
 
 
        this.getContentPane().add(b1,BorderLayout.NORTH);
        this.getContentPane().add(sp,BorderLayout.CENTER);
        this.getContentPane().add(textarea,BorderLayout.SOUTH);
        
        
    }
    private class Listener implements ActionListener{
            public void actionPerformed(ActionEvent e){
                JButton bt=new JButton("test");  
                p.setBackground(Color.blue);  //改变面板P的颜色,成功了
                p.add(bt);    //在面板P中增加一个组件,但是不可以马上显示,//
                //只有你改变了窗口的大小,时候才会显示增加的组件,这个时候是重画了组件吧??
                repaint();
                sp.repaint();
            }    
    }
}


但是我想一点就可以马上显示增加的组件,请问怎么做, 
麻烦讲解下,,谢谢。。。
代码可能有点乱,我写在了一个代码编辑器:
[url=http://www.chinajavaworld.com/thread.jspa?threadID=747873]http://www.chinajavaworld.com/thread.jspa?threadID=747873[/url]

回复列表 (共3个回复)

沙发

不要用 repaint() , 方法 updateUI() 用于更新UI组件的。

private class Listener implements ActionListener{
            public void actionPerformed(ActionEvent e){
                JButton bt=new JButton("test");  
                p.setBackground(Color.blue);  
                p.add(bt);   
                p.updateUI();  //更新组件
            }    
    }

板凳

谢谢楼上的

3 楼

有一个经常使用的工具方法
SwingUtilities.updateComponentTreeUI(Component comp);
这个方法可以立即更新comp组件,如果comp是一个容器(JPanel,Container..)
那么这个容器上的组件都会被更新.

我来回复

您尚未登录,请登录后再回复。点此登录或注册