Вы можете отменить клавиатуру, убрав фокус TextFormField
и передав ее неиспользованному FocusNode
:
FocusScope.of(context).requestFocus(new FocusNode());
похоже, что у вас все в порядке!
Теперь то, что я считаю вашим учителем, это: обработчик должен быть экземпляром (а не «объектом») внутреннего класса, который расширяет WindowAdapter
class .
Сделав следующее:
new WindowAdapter() {
// Use annotations, it's useful :)
@Override
public void windowCloses(WindowEvent e) {
// ...
}
}
... вы на самом деле создаете новый анонимный класс, который extends WindowAdapter
. В этом новом определении вы переопределяете метод WindowAdapter#windowCloses
, затем создаете его в новом объекте, который вы передаете в качестве аргумента в addWindowListener
.
По-видимому, ваш учитель ожидает, что вы на самом деле определите внутренний класса и создать новый экземпляр. Я не хочу просто дать вам код для этого, но вы чертовски близки, вы это выясните в одно мгновение!
Насколько я понимаю, это должно помочь:
addWindowListener(new WindowAdapter() {
public void windowCloses(WindowEvent e) {
try{
int confirmed = JOptionPane.showConfirmDialog(null,
"This is my handler. Shall I Exit?", "Exit Message Box, JOptionPane.YES_NO_OPTION);
if (confirmed == JOptionPane.YES_OPTION) {
dispose();
}
}
catch(Exception ex){
//Error print
e.getWindow.dispose()
}
});
addWindowListener(new InnerClass())
:) – ccjmne 29 November 2015 в 22:03