2016-12-24 6 views
-2

Я ищу пояснить, в ответ на данный старый вопрос: Do something when the close button is clicked on a JFrameСделайте что-нибудь, когда нажать на кнопку закрытия на JFrame (необходимо уточнение)

В ответ Ravindra Gullapalli предложил этот код:

import javax.swing.JOptionPane; 
/*Some piece of code*/ 
frame.addWindowListener(new java.awt.event.WindowAdapter() { 
    @Override 
    public void windowClosing(java.awt.event.WindowEvent windowEvent) { 
     if (JOptionPane.showConfirmDialog(frame, 
      "Are you sure to close this window?", "Really Closing?", 
      JOptionPane.YES_NO_OPTION, 
      JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION){ 
      System.exit(0); 
     } 
    } 
}); 

Во-первых, это правильный способ сделать это в Netbeans?

Во-вторых, что такое «рама»? (первое слово в третьей строке кода в ответе, а также первый параметр showConfirmDialog). Согласно API swing, это должно быть типа Component. Однако, когда я заменил это свойством Title моего JFrame, я все равно получил ошибку «не могу найти символ». Имя компонента отличается от названия JFrame, и если да, где я могу его найти? В Навигаторе NetBeans он просто говорит [JFrame] и не отображает имя компонента, в отличие от всех других объектов Form, которые отображают и редактируют имя компонента рядом с типом.

ответ

2

«frame» просто считается именем переменной для JFrame в коде, который не показан. Если ваша программа имеет JFrame или другое окно верхнего уровня с именем «frame», и оно находится в области действия этой строки кода, вы работаете в бизнесе. В противном случае вам придется использовать имя переменной, которое вы сейчас используете , используя. Это еще одна причина, чтобы избежать «заимствования» кода. Вместо этого изучите концепции, заимствуйте идеи и используйте их для написания собственного кода.


Что касается:

ли компонент имя отличается от заголовка JFrame, и если да, то где я могу его найти?

Не уверен, что вы имеете в виду здесь. Снова в коде в ответе frame - это имя переменной, а не «имя компонента» или «title». Это включает в себя концепции Java 101 - имена переменных и область переменных и не имеет ничего общего с Swing или NetBeans.


Что касается:

это правильный путь для NetBeans»

это, если это поведение, которое вы пытаетесь достичь

+0

У меня нет доступа к имени переменной внутри Netbeans. Это также было рассмотрено здесь: http://stackoverflow.com/questions/23393107/adding-listeners-in-netbeans –

+0

@mattg ответ того же вопроса говорит вам, как это не проблема –

2
.

Во-вторых, что такое «рама»?

Ссылка на фрейм, который содержит кнопку закрытия, на которую вы только что нажали.

Однако, когда я заменил это со свойством Название моей JFrame

Не уверен, почему вы должны использовать «Title» собственности. Это просто строка. Вы не можете открыть/закрыть строку.

Во-первых, это правильный способ сделать это в Netbeans?

Лучше структура кода в WindowListener может быть:

JFrame frame = (JFrame)windowEvent.getSource(); 

, то вам не придется беспокоиться об определении переменной в классе.

Также вы можете использовать:

frame.dispose(); 

вместо System.exit(). JVM отключится, если это последнее открытое окно.

+0

Спасибо, но я не знаю, что вы имеете в виду WindowListener (возможно, это нечто более актуальное вне Netbeans, я попытался изучить его и нашел это: http://stackoverflow.com/questions/23393107/adding-listeners-in-netbeans) –

+0

'Я не знаете, что вы имеете в виду у WindowListener' - что? Вы используете метод 'addWindowListener (...)'. Почему вы используете этот метод, если не знаете, что такое 'WindowListener'? Я предлагаю вам ознакомиться с разделом из учебника Swing по [Как написать WindowListener] (http://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html) для получения основных сведений и примеров. Держите ссылку удобной для всех основ Swing. – camickr

+0

Хорошо, спасибо за ссылку. –