帮忙看个小程序,先画一个JCheckBox,如果JCheckBox被选中,就动态地画个JButton到jframe里面,画完调用updateui为什么没效果?要调整下窗口大小才能显出来,另附上另一个程序,调用updateui就可以
import java.awt.Container;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;public class Text extends JFrame{
JCheckBox a = new JCheckBox("1");
JColorChooser j = new JColorChooser();
Frame f = new Frame("text");
JPanel p= new JPanel(new GridLayout(4,1)); public void lantchFrame(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
p.add(a);
f.add(p);
a.addActionListener(new MyListener());
f.pack();
f.setSize(320,240);
f.setVisible(true);
}
class MyListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(a.isSelected()){
JButton jb3 = new JButton("jb3");
p.add(jb3);
p.updateUI();
}
}
}
public static void main(String [] args){
Text t=new Text();
t.lantchFrame();
}}
//这是我从网上找的,测试可用,不过我找不出上面程序哪里错了- -
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;public class Ss extends JFrame {    Container con = this.getContentPane();
    JButton jb1 = new JButton("jb1");
    JButton jb2 = new JButton("jb2");
    JLabel jl1 = new JLabel("jl1");
    FlowLayout gly = new FlowLayout();
    JPanel jp = new JPanel(gly);    public Ss() {
        con.add(jp);
        jp.add(jb1);
        jp.add(jb2);
        MyListener ml = new MyListener();
        jb1.addMouseListener(ml);
        this.setSize(300, 200);
        this.setVisible(true);
    }    private class MyListener extends MouseAdapter {
     public void mouseClicked(MouseEvent e) {
           try {
                JButton jb3 = new JButton("jb3");
                jp.add(jb3);
                jp.updateUI();//可以正常显示
           } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }    public static void main(String s[]) {
        Ss sss = new Ss();
        sss.setVisible(true);
    }
}

解决方案 »

  1.   

               try {
                    JButton jb3 = new JButton("jb3");
                    jp.add(jb3);
                    jp.updateUI();//可以正常显示
               } catch (Exception ex) {
                    ex.printStackTrace();
                }        public void actionPerformed(ActionEvent e) {
                if(a.isSelected()){
                    JButton jb3 = new JButton("jb3");
                    p.add(jb3);
                    p.updateUI();
                }
            }跟楼主的if()循环不协调;if()循环只做一次
      

  2.   

    是个布局的问题, 研究哈GridLayout与FlowLayout的区别
      

  3.   

       Frame f = new Frame("text");这句  你能够换成JFrame么?
    JFrame 跟Frame有很大的区别的,别混用
      

  4.   

    果然是JFrame的问题,第一个程序本来是自己写的,第二个是后来找百度来的,所以有些差别没注意,谢谢你