2016-02-24 3 views
2

Я знаю, что я могу добавить ActionListener в JButton, если объявить JButton с именем.Как добавить ActionListener в JButton

JButton showDialogButton = new JButton("Click Me"); 

    showDialogButton.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
     // display/center the jdialog when the button is pressed 
     JDialog d = new JDialog(frame, "Hello", true); 
     d.setLocationRelativeTo(frame); 
     d.setVisible(true); 
     } 
    }); 

Но что я должен делать, если у меня есть следующий код:

MyJFrame frame = new MyJFrame(); 
frame.setSize(500,300); 
JPanel base = new JPanel(); 

base.setLayout(new BorderLayout()); 

JPanel north = new JPanel(); 

north.add(new JLabel("Name")); 
north.add(new JTextField()); 
north.add(new JButton("Enter")); 
north.add(new JButton("Exit")); 

Я был бы признателен любой ответ.

+1

Как насчет 'JButton enterButton = new JButton (« Enter »); enterButton.addActionListener (независимо); north.add (enterButton); '? – Thomas

+2

@Thomas «SOreadytohelp» - это то, что он говорит в вашем профиле. Даже если это раздел комментариев, вы можете попытаться оправдать этот девиз и не публиковать такие вещи. – Seth

+3

@ Томас Вау, какой ободряющий комментарий –

ответ

0

Для того, чтобы добавить ActionListener к вашему JButton вы должны сохранить ссылку на него так, поэтому вы не можете просто передать его в качестве new в конструкторе JPanel.
Решение по существу делает то, что вы делали раньше, что объявить + инициализировать их отдельно: JButton myButton = new JButton("My Button");, а затем просто добавить ActionListener как раньше, чтобы ваши JPanel:

myButton.addActionListener(new ActionListener() ...); 

Тогда просто north.add(myButton);.

0

Объявить их вне оных

JButton exit = new JButton("exit"); 
exit.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
     //do stuff 
     } 
    }); 
north.add(exit); 

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

+1

То, что именно он имеет в своем первом коде .... –

+0

Я показывал пример, основанный на его коде на объявлении, затем добавляя на панели, надеясь, что это прояснит это. – Ronan

0

После поиска через API Java, я обнаружил, что метод add возвращает компонент добавляется. К сожалению, это всего лишь общий объект Component и не может быть прикован без приведения. Но вы можете получить добавленный объект, как это:

import javax.swing.*; 
import java.awt.event.*; 
import java.awt.*; 

public class GuiTest 
{ 
    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame(); 
     frame.setSize(500, 300); 
     JPanel base = new JPanel(); 

     base.setLayout(new BorderLayout()); 

     JPanel north = new JPanel(); 

     Component comp1 = north.add(new JLabel("Name")); 
     System.out.println("comp1 class type: " + comp1.getClass().getName()); 
     Component comp2 = north.add(new JTextField()); 
     System.out.println("comp2 class type: " + comp2.getClass().getName()); 
     Component comp3 = north.add(new JButton("Enter")); 
     System.out.println("comp3 class type: " + comp3.getClass().getName()); 
     ((JButton)north.add(new JButton("Exit"))) 
       .addActionListener(new ActionListener() 
        { 
         public void actionPerformed(ActionEvent e) 
         { 
          System.out.println("EXIT"); 
         } 
        }); 
     base.add(north); 

     frame.getContentPane().add(base); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 

Этот код является полным и поддающимся проверке (я проверил это на моей машине x64 Arch Linux). Это немного уродливо, но работает.

+0

Я знаю, что он уродливый и ужасный, но он придает ActionListener анонимному JButton, что и было вопросом. Я лично никогда не сделаю этого в коде, но он продемонстрирует, что это возможно. – callyalater

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