2015-03-08 3 views
0

Я пытаюсь найти основные принципы добавления действия к JButton или другим компонентам. Вот что я делаю и что получаю.Принципы ActionListener

Я создал класс с именем: Ali, который имеет основной метод в нем, внутри основного метода. Создайте еще один метод: MainFrame и любые компоненты, которые у меня есть, здесь.

Я создал простую кнопку здесь, зарегистрировался, что с интерфейсом ActionListener, и я написал для этого метод actionPerformed(). Очень просто и легко. Но, как-то эта программа дала мне ошибку. Вот упрощенные коды и ошибки.

import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

public class Ali{ 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       JFrame frame = new MainFrameAli2("MainFrameAli2"); 
       frame.setSize(400,600); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       frame.setVisible(true); 
      } 
     }); 
    } 
} 

А вот MainFrameAli2 класс

public class MainFrameAli2 extends JFrame implements ActionListener { 

    public MainFrameAli2(String title){ 
     super(title); 

     // set layout manager 
     setLayout(new BorderLayout()); 

     // create swing component 
     JTextArea textArea = new JTextArea(); 
     JButton button = new JButton("click"); 

     // add swing components to content pane 
     Container c = getContentPane(); 
     c.add(textArea, BorderLayout.NORTH); 
     c.add(button, BorderLayout.SOUTH); 

     // add behavior 
     button.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent arg0) { 
       System.out.println("Clicked"); 
      } 
      }); 
    } 
} 

Теперь проблема код не работает, здесь ошибка:

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems: 
    The public type MainFrameAli2 must be defined in its own file 
    The type MainFrameAli2 must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent) 

И, если я пишу код, как показано ниже , все работает нормально.

 // add behavior 
    button.addActionListener(this); 
} 

public void actionPerformed(ActionEvent e) { 
    System.out.println("hooyt"); 
} 
} 

Почему он не работает в первом случае и работает во втором корпусе?

+0

Для лучшей помощи раньше, опубликовать [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полная Проверяемость пример) или [ SSCCE] (http://www.sscce.org/) (короткий, самосохраненный, правильный пример). –

+1

1) 'Неразрешенные проблемы компиляции' Не пытайтесь запускать код перед его компиляцией! 2) Единственная пустая строка пробела в исходном коде - это все, что требуется *. Пустые строки после '{' или before '}' также типично избыточны. –

ответ

2

so, why it is not working in the first case and working in second case.?

Как сообщение компилятор говорит, в первом примере, вы не реализовали интерфейс ActionListener в своем классе MainFrameAli2.

Вы создали анонимный внутренний класс, который реализует интерфейс ActionListener. Это не то же самое, что ваш класс реализует интерфейс.

Во втором примере ваш класс реализует ActionListener.

Если первый пример, который вы могли бы сделать:

//public class MainFrameAli2 extends JFrame implements ActionListener { 
public class MainFrameAli2 extends JFrame { 
+0

Большое спасибо. Теперь я понял, где я ошибся. – user1971804

+0

Пожалуйста, [примите ответ] (http://meta.stackexchange.com/a/5235/155831), если это помогло решить проблему. –

+0

Кстати, вы сказали: «Вы создали анонимный внутренний класс, который реализует интерфейс ActionListener». по «внутреннему классу», вы имеете в виду (новый ActionListener())? и что вы на самом деле означали интерфейс? isnt ActionListener интерфейс? Спасибо – user1971804

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