2013-05-03 135 views
2

我有一个类(类ButtonX),其中包含一个按钮销毁类的实例,然后再创建它的实例

当用户点击这个按钮,它会创建类的实例DialogX

当我创建类DialogX的情况下它会显示JDialog

public class ButtonX { 

    public ButtonX() { 
     JFrame me = new JFrame(); 
     JButton n = new JButton("show dialog"); 
     n.addActionListener(ListenerX.listen); 
     me.getContentPane().add(n); 
     me.pack(); 
     me.setVisible(true); 
    } 

    public static void main (String[]args){ 
     new ButtonX(); 
    } 
} 

听众的是JButton

包含 JDialog

public class DialogX { 
    static JDialog g = new JDialog(); 
    public DialogX() { 
     JLabel label = new JLabel("label"); 
     g.getContentPane().setLayout(new FlowLayout()); 
     g.getContentPane().add(label); 
     g.pack(); 
     g.setModalityType(Dialog.ModalityType.APPLICATION_MODAL); 
     g.setVisible(true); 
    } 

} 

什么,我尽量做到0

public class ListenerX { 
    public static ActionListener listen = new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      DialogX dialogx = null; 
      dialogx = new DialogX(); 
     }}; 
} 

类是,当用户点击这个按钮,它会(如果存在的话)销毁DialogX类的实例,然后创建DialogX

再次实例

怎么办?

感谢..

原谅我的英语..

+0

什么是您的问题 – 2013-05-03 13:10:32

+0

@GuillaumePolet我需要创建一个新的JDialogX实例,每次用户点击按钮..但根据我的邮政编码,(我认为)它不创建一个新的实例..由JDialog显示必须总是有1 JLabel,但它不.. JDialog总是再次添加一个新的JLabel每次用户单击按钮.. – 2013-05-03 13:15:38

+3

删除JDialog前面的静态g =新的JDialog();' – 2013-05-03 13:16:15

回答

3

不能明确破坏Java对象。一旦没有更多的引用(想到指针)到左边的对象,它将被标记为有资格被垃圾收集。因此,您的代码是,几乎可以使用,因为它会删除旧的DialogX实例引用并创建一个新的引用。 您需要做的是使用DialogX类扩展JDialog(然后您可以完全删除JDialog变量)或在JDialog变量g之前删除static keywoard。然后,您可以拨打dialogx.dispose()(您扩展了JDialog)或您需要实施的自定义方法,以将呼叫转接到g.dispose()(您没有扩展JDialog)。

+0

由于您没有添加行为,因此无需扩展'JDialog'。删除静态关键字就够了,但前面已经说过了。 – 2013-05-03 13:20:07