2015-11-29 8 views
0

Я работаю над назначением школы в школе Java, думал, что все закончил, но потом снова перешел к требованиям и понял, что я упустил конкретное требование, и теперь мне нужно переписать раздел кода , но я не понимаю, о чем меня спрашивают.WindowAdapter In Inner Class

Мне нужно что-то произойти, когда окно GUI закрывается, в настоящее время я написал его как простой метод, и он отлично работает, но в задании говорится: «обработчик должен быть объектом внутреннего класса, который расширяет WindowAdapter class «У меня есть базовое понимание внутренних классов и расширение, но это утверждение, что это должен быть объект? Я смущен.

В настоящее время я просто это как часть класса GUI, и это работает прекрасно, я знаю требования просят что-то другое, но я не знаю, как это сделать:

addWindowListener (new WindowAdapter() 
{ 
    public void windowCloses(WindowEvent e) 
    { 
      try 
      { 
       //Code logic 
      } 
      catch (Exception ex) 
      { 
      //Error print 
      e.getWindow().dispose(); 
      } 
    } 

Как Я сказал: теперь все отлично работают, но я не думаю, что это то, что требуется. Я хотел бы спросить моего профессора, но я не думаю, что он вернется ко мне вовремя к крайнему сроку.

Как мне переписать этот код для соответствия требованиям? '

Спасибо!

редактировать: (спасибо!) Добавление к этому на основе информации, которую я получил до сих пор

class innerClass extends WindowAdapter { 

     public void windowClosing(WindowEvent e){ 

      //Same logic as above 
     } 
} 

Я думаю, что я понял это. Итак, теперь я создаю экземпляр этого класса и добавляю к нему windowListener?

+0

Быстро посмотрите на мой ответ ниже и ознакомьтесь с основными примерами ** внутренних классов **, и я уверен, что у вас не будет проблем с настройкой вашего кода соответственно. Не стесняйтесь просить некоторую точность, если вам нужно! – ccjmne

+0

И не забудьте ответить на ответ @ ccjmne и, возможно, принять его, если он ответит на ваш вопрос. Это хорошо. –

+0

Ничего себе, спасибо @HovercraftFullOfEels, это означает, что многое для меня происходит от вас! – ccjmne

ответ

2

выглядит, как вы получили все правильно!

Теперь то, что я предполагаю, что ваш учитель означает: обработчик должен быть экземпляр (не «объект») из внутреннего класса, который расширяет класс WindowAdapter.

, выполнив следующие действия:

new WindowAdapter() { 

    // Use annotations, it's useful :) 
    @Override 
    public void windowCloses(WindowEvent e) { 
     // ... 
    } 
} 

... вы на самом деле создает новый класс анонимным что extends WindowAdapter. В этом новом определении, вы переопределить метод WindowAdapter#windowCloses, то вы экземпляра его в нового объекта, который вы передаете в качестве аргумента addWindowListener.

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

+0

С кодом, написанным таким образом, где я могу поместить windowListener? – bnr32jason

+0

Я думаю, что лучше понимаю, это не совсем понятно, но я отредактировал оригинал, чтобы добавить то, что я сделал. Благодаря! – bnr32jason

+0

Да, я только что прочитал ваш обновленный вопрос! Это прекрасно (за исключением того, что соглашение состоит в том, чтобы все имена классов начинались с прописных букв), вы получили его! Теперь вы можете использовать 'addWindowListener (новый InnerClass()) :) :) – ccjmne

0

К чему я могу понять, это должно помочь:

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() 
     } 
    }); 
+0

Спасибо за ввод, но, похоже, вы, возможно, неправильно поняли. Мне не нужна помощь в написании логики кода, я оставил ее, потому что все работает нормально. Я на самом деле просил переписать код как внутренний класс, но я довольно запутался в этом. – bnr32jason