[求助]紧急求救
刚开始看swing,这是我看完书以后的一个实验:import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Tes extends JFrame{
JButton jb;
JTextArea ja;
//(1)JDialog jd;
Tes(){
super("pk");
Container c=this.getContentPane();
jb=new JButton("a");
ja=new JTextArea(10,10);
// (2)jd=new JDialog(this,"b");
//(4) jd.setVisible(true);
c.add(jb,BorderLayout.NORTH);
c.add(ja,BorderLayout.EAST);
//(3)c.add(jd,BorderLayout.WEST);
setVisible(true);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public static void main(String arg[]){
Tes t=new Tes();
t.pack();
}
}
这样运行没有问题,但当我把(1)(2)(3)语句添加上的时候,窗口出不来,会在命令提示符下出现:
Exception in thread "main"java.lang.IllegalArgumentException:adding
a window to a container.........
进一步,如果我把(4)加上去的话,JFrame还是出不来,JDialog确出来了,但上面那句报错却依然存在.
各位前辈请指点一下吧~~拜托.
----------------解决方案--------------------------------------------------------
刚才看下书,明白了,好象是因为容器中不能既有轻组件又有重组件的缘故.
是这样吗?
怎么解决呢?
kai斑竹不要看见了不管哦~
----------------解决方案--------------------------------------------------------
apodemas, see code... import java.awt.*; import java.awt.event.*; import javax.swing.*; class Tes extends JFrame { JButton jb; JTextArea ja; JDialog jd; Tes() { super("pk"); Container c = getContentPane(); MyButtonListener bl = new MyButtonListener(); jb = new JButton("a"); jb.addActionListener(bl); ja = new JTextArea(10,10); jd=new JDialog(this,"b"); JLabel label = new JLabel("Hello apodemas, I am kai. ", JLabel.CENTER); jd.getContentPane().add(label); jd.setSize(200,100); jd.setLocationRelativeTo(this); c.add(jb,BorderLayout.NORTH); c.add(ja,BorderLayout.EAST); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); setVisible(true); } class MyButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { Object o = e.getSource(); if(o == jb) jd.setVisible(true); } } public static void main(String arg[]) { Tes t=new Tes(); t.pack(); } }
----------------解决方案--------------------------------------------------------
感谢kai斑竹的帮忙,我刚才实验了下您的代码,然后把无关紧要的去掉,直到和我原来的代码差不多,竟然发现能正常运行.
后来仔细一看才知道我那代码罪魁祸首是"c.add(jd,BorderLayout.WEST);",真是晕到家了
怪我习惯性的添上去了.
但还有个问题就是我上面那段解释是,书上那段话是对还是错呢?JFrame是窗体,JDialog是重组件,JButton和JTextArea是轻组件,书上说尽量不要把轻重都放在一个窗体里,而且书上的例子遇到放一起也都放在JApplet里.
起码看起来这段代码的错原因不是这个了.
----------------解决方案--------------------------------------------------------
kai斑竹 真不赖。。。两三下就搞定。。。
Japplet、JFrame、Jdialog类的子类是重组件, Jcomponent类的子类是轻组件,轻组件必须在重量组件中绘制自己。
----------------解决方案--------------------------------------------------------