2013-05-03 2 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

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

класс, который содержит 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); 
    } 

} 

, что я пытаюсь добиться того, что, когда пользователь нажимает на кнопку, он уничтожит экземпляр класса DialogX (если она существует), а затем создать снова экземпляр DialogX

Что делать?

спасибо ..

простите мой английский ..

+0

Что вы думаете –

+0

@GuillaumePolet Мне нужно создать новый экземпляр JDialogX каждый раз, когда пользователь нажимает кнопку. Но в соответствии с моим почтовым кодом (я думаю) его не создать новый экземпляр .., показанный JDialog, должен всегда есть 1 JLabel, но это не так. JDialog всегда добавляет новый JLabel каждый раз, когда пользователь нажимает кнопку. –

+3

Удалите 'static' перед' JDialog g = new JDialog(); ' –

ответ

3

Вы не можете явно уничтожать объекты в Java. Когда больше нет ссылок (думайте о указателях) на объект слева, он будет отмечен как имеющий право на сбор мусора. Поэтому ваш код почти отлично, поскольку он удаляет старую ссылку на экземпляр DialogX и создает новую. Что вам нужно сделать - либо расширить JDialog с помощью вашего класса DialogX (тогда вы можете полностью удалить переменную JDialog), либо удалить ключ клавиатуры static перед переменной JDialog g. Затем вы можете позвонить dialogx.dispose() (вы расширили JDialog) или пользовательский метод, который вам нужно реализовать, который переадресовывает вызов на g.dispose() (вы не расширили JDialog).

+0

Не нужно расширять' JDialog', так как вы не добавляете к нему поведение. Отбрасывание ключевого слова 'static' достаточно, но это уже было сказано. –

Смежные вопросы