在run()或main之外执行write action的区别是什么

时间:2011-09-14 07:11:31

标签: swing

我在主要

之外编写动作执行代码
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");
            }
        });

这两者之间有什么区别,是否存在与编程开销相关的问题,这是更好的编码风格。

当我在run()中使用netbeans时,它会要求使jTextField1变为静态因为主要的mathod是静态的,所以我认为firstone不好,因为它会占用内存,直到程序被stoped.am我是正确的?

2.如果我想这样做,所有按钮操作都是用不同的类编写的,那么我该如何以swing形式实现呢。

1 个答案:

答案 0 :(得分:0)

尽量保持你的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!");
    }

}

并在NB的initComponents()之后将ActionListener添加到构造函数中的按钮:

public NewJFrame() {
    initComponents();
    ActionListener al = new AListener();
    jButton1.addActionListener(al);
    jButton2.addActionListener(al);
}

要使其工作,您必须为每个按钮添加适当的setActionCommand字符串:

    jButton1.setActionCommand("B1");
    jButton2.setActionCommand("B2");

在Netbeans中,如果您更改每个按钮的创建后代码以包含它应该包含的字符串,则可以轻松完成。

我认为在“正常”情况下(你没有60个按钮等),坚持标准可能仍然会更好。如何设计应用程序是一个品味问题。

大多数情况下,应用程序的操作必须共享您的类本地的数据详细信息。为了避免显式地将该信息传递给您的AListener,并且为了能够使用this,请将ActionListener放在您正在使用的类中。