自定义MyJPanel为什么不起作用?
在一个工程中,自定义了一个MyJPanel类,其内容如下:
package MyPanel;
import java.awt.*;
在一个文件中定义了如下的类
import javax.swing.JPanel;
public class MyPanel extends JPanel {
public void MyPanel() {
this.add(new Label("Label Inside"));
}
}
然后,在另一个Frame.java文件中,添加如下片断:
MyPanel mp = new MyPanel();
contentPane.add(mp,BorderLayout.SOUTH);
mp.add(new Label("Label Outside"));
奇怪的是,尽管可以看到Label Outside,却怎么样也看不到Label Inside
有哪位仁兄能解除我的这个疑惑嘛?
问题点数:50、回复次数:5Top
1 楼jackkui(键 之 舞 者)回复于 2005-01-03 11:10:35 得分 20
我做了如下的测试,完全可以
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JFrame;
public class Test1 extends JPanel{
public Test1(){
this.add(new JLabel("This is inside"));
}
public static void main(String[] args){
JFrame frame = new JFrame();
Test1 test = new Test1();
frame.getContentPane().add(test);
test.add(new JLabel("This is outside"));
frame.show();
}
};Top
2 楼vgvg(上帝在关闭一扇窗的同时,在别处打开了一扇门。可这扇门迟迟不开,我只好破门而入!)回复于 2005-01-03 11:17:06 得分 20
public void MyPanel() {
this.add(new Label("Label Inside"));
}
去掉void,Top
3 楼21st_centry_fox(花不归)回复于 2005-01-03 16:25:12 得分 0
真的,去掉void就可以了,谁能告诉我为什么呢?!!!不明白呀!只是一个可有可无的返回值类型啊,这怎么会对结果有影响呢?!!
谢谢楼上的二位!!Top
4 楼vgvg(上帝在关闭一扇窗的同时,在别处打开了一扇门。可这扇门迟迟不开,我只好破门而入!)回复于 2005-01-03 16:29:15 得分 10
去掉以后他是一个构造方法当执行
MyPanel mp = new MyPanel();
就会执行this.add(new Label("Label Inside"));
不去掉时他是一个方法,需要调用才能执行.Top
5 楼21st_centry_fox(花不归)回复于 2005-01-03 16:47:54 得分 0
这真是一个隐蔽的陷阱啊
不小心还真的挺难发现的!
java设计这样也真算是一个缺陷啊,如果c+里这样做早编译器应该已经报错了吧。
谢谢楼上的大哥,结帐!Top




