我在主要
之外编写动作执行代码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形式实现呢。
答案 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放在您正在使用的类中。