关于updateui

jessewizard 2010-06-06 10:03:02
帮忙看个小程序,先画一个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);
}
}
...全文
290 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jessewizard 2010-06-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yueguangkai001 的回复:]
Frame f = new Frame("text");这句 你能够换成JFrame么?
JFrame 跟Frame有很大的区别的,别混用
[/Quote]
果然是JFrame的问题,第一个程序本来是自己写的,第二个是后来找百度来的,所以有些差别没注意,谢谢你
yueguangkai001 2010-06-07
  • 打赏
  • 举报
回复
Frame f = new Frame("text");这句 你能够换成JFrame么?
JFrame 跟Frame有很大的区别的,别混用
Mybeautiful 2010-06-07
  • 打赏
  • 举报
回复
是个布局的问题, 研究哈GridLayout与FlowLayout的区别
  • 打赏
  • 举报
回复
           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()循环只做一次
jessewizard 2010-06-06
  • 打赏
  • 举报
回复
没人回答吗- -

62,614

社区成员

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

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