由于缺乏面向对象编程经验而犯的一个低级错误
我先是创建了一个对话框类
class MyDialog extends JDialog{ //自定义一个对话框类
MyDialog(Example frame){ //定义对话框构造方法
JDialog jd=new JDialog(frame, "第一个Dialog窗体", true); //新建一个对话框jd
Container container=jd.getContentPane(); //为对话框jd添加窗格容器
container.add(new JLabel("这是一个对话框")); //在对话框窗格中新建一个标签
jd.setBounds(120, 120, 100, 100); //设置对话框范围
然后在主窗口设置点击事件监听器
jb.addActionListener( //为jb按钮设置点击事件监听器
new ActionListener() { //新建一个点击事件监听器
@Override
public void actionPerformed(ActionEvent e) { //设置点击后触发的事件
// TODO Auto-generated method stub
new MyDialog(Example.this).setVisible(true);//弹出一个新建的对话框并设置为可见
}}
);
然后就出现了点击按钮弹出的是空对话框
后来仔细看了看自己的代码,才发现设置对话框是否可见时.setVisible(true)用错了地方,我写的new MyDialog(Example.this).setVisible(true);调用了自定义对话框类MyDialog的构造方法,而MyDialog继承了JDialog类,所以在MyDialog的构造方法里会自动调用父类的构造方法来构造子类继承父类的部分,所以就创建了一个空对话框,而在子类构造方法中又自己新建了一个JDialog的对话框并加入了标签。所以就创建了两个窗口但是设置可见性时我并没有对加入标签的对话框设置可见,相反直接对父类构造方法创建的空对话框设置了可见。所以正确的代码
class MyDialog extends JDialog{ //自定义一个对话框类
MyDialog(Example frame){ //定义对话框构造方法
super(frame, "第一个Dialog窗体", true); //新建一个对话框jd
Container container=getContentPane(); //为对话框jd添加窗格容器
container.add(new JLabel("这是一个对话框")); //在对话框窗格中新建一个标签
setBounds(120, 120, 100, 100); //设置对话框边界
@Override
public void actionPerformed(ActionEvent e) { //设置点击后触发的事件
// TODO Auto-generated method stub
new MyDialog(Example.this).setVisible(true);//弹出一个新建的对话框并设置为可见