2015-09-29 5 views
3

Я нашел этот ответ на SO и был смущен.Нужно ли использовать промежуточный метод «dispose()» в ActionListener?

У нас есть вопрос о том, кто хочет знать, как избавиться от JDialog в ActionListener.

try this way: 

exit.addActionListener(new java.awt.event.ActionListener() { 
    public void actionPerformed(java.awt.event.ActionEvent evt) { 
     exitActionPerformed(evt); 
    } 
}); 
and then 

private void exitActionPerformed(java.awt.event.ActionEvent evt) { 
     this.dispose(); 
    } 

Это код, что человек, который ответил отправил (here's ссылку на вопрос)

Вот что я делаю в моем собственном коде:

buttonCancel.addActionListener(new ActionListener(){ 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      dispose(); 
     } 
    }); 

Но я действительно беспокоит ответ выше. Я что-то делаю неправильно или ничего не меняет, если так делается? Если это не повлияет, вы знаете, почему человек ответил, используя промежуточный метод?

Спасибо

+1

Нет никакой разницы, он просто вызывает отдельный метод, чтобы расположить диалог и ничего больше. –

+1

Первым вариантом является то, как инструменты для разработчиков генерируют код. Это облегчает вставку больших фрагментов кода, которые должны быть предпочтительно помещены во внешний класс. Семантической разницы нет, и вы можете опустить эту косвенность, если вы делегируете один существующий метод, например 'dispose()' anyway. Это имело значение, если 'exitActionPerformed' не был' private' ... – Holger

ответ

4

Я предполагаю, что ваш содержит в MyDialogclass который extends JDialog

Рассмотрим ваш следующий код.

exit.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      exitActionPerformed(evt); 
     } 
    }); 

Вы создали анонимный внутренний класс java.awt.event.ActionListener. Если вы используете ключевое слово внутри анонимного внутреннего класса, оно позволяет получить доступ к нему самостоятельно, но не MyDialogclass, как вы ожидали. Поэтому метод this.dispose() недоступен. Но вы можете получить доступ к нему, как MyDialog.this.dispose();

Посмотрите на свой второй пример

buttonCancel.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      dispose(); 
     } 
    }); 

Конечно, ActionListener также анонимный внутренний класс здесь. Но он позволяет обращаться к методам его содержащего класса. Таким образом, здесь можно использовать метод dispose().

+0

Я не использовал имя пакета. Я просто использовал имя класса 'MyDialog'. –

3

Оба имеют такой же эффект.

Этот промежуточный метод может использоваться для выполнения некоторых действий перед удалением. Этот тип действия также будет выполнен с вашей версией, но использование промежуточного метода может привести к более читабельному.

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

  • Нет связанных вопросов^_^