Постарайтесь, чтобы ваш main как можно меньше, уменьшите его до простого вызова конструктора и setVisible (true).
public void run() {
new NewJFrame().setVisible(true);
}
Причина в том, что вам может потребоваться повторно использовать вашкласс в другом приложении.Всегда лучше создавать все свои виджеты в классе, сохраняя макет Netbeans.
Если вы используете второй вариант и вам нужно будет использовать this
, он будет ссылаться на ActionListener, а не на виджет Swing, который расширяет ваш класс.
Чтобы поместитьваш ActionListener в другом классе создаст такой класс:
public class AListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("B1"))
JOptionPane.showMessageDialog(null, "B1 clicked!");
else if (e.getActionCommand().equals("B2"))
JOptionPane.showMessageDialog(null, "B2 clicked!");
}
}
и добавит ActionListener к вашей кнопке в конструкторе после initComponents () NB, например:
public NewJFrame() {
initComponents();
ActionListener al = new AListener();
jButton1.addActionListener(al);
jButton2.addActionListener(al);
}
Для этогоДля работы вам нужно добавить соответствующие строки setActionCommand для каждой кнопки:
jButton1.setActionCommand("B1");
jButton2.setActionCommand("B2");
В Netbeans это легко сделать, если вы измените код пост-создания каждой кнопки, добавив в нее строку, которую он должен.
Я думаю, что в «нормальных» случаях (когда у вас нет 60 кнопок или около того), все же может быть лучше придерживаться стандартов.Это вопрос вкуса, как вы разрабатываете свое приложение.
В большинстве случаев действиям приложения приходится обмениваться данными, которые являются локальными для вашего класса.Во избежание явной передачи этой информации вашему AListener и возможности использовать this
, храните ваши ActionListeners вместе внутри класса, который вы используете.