В чем разница между действием записи, выполненным в run () или вне основного - PullRequest
0 голосов
/ 14 сентября 2011

Я пишу код выполненного действия как вне основного

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
    jTextField1.setText("do something");
}

, и он может быть записан в run () как

       jButton1.addActionListener(new java.awt.event.ActionListener(){


            public void actionPerformed(ActionEvent e) {
                jTextField1.setText("aaaaaaaaaa");
            }
        });

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

Я использую netbeans, когда я пишу его в run (), он потребует сделать jTextField1 для static, так как основной метод является статическим, поэтому я думаю, что сначалане хорошо, потому что он будет занимать память до тех пор, пока программа не будет остановлена. Я исправляю?

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

1 Ответ

0 голосов
/ 14 сентября 2011

Постарайтесь, чтобы ваш 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 вместе внутри класса, который вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...