【发布时间】:2012-02-18 00:12:14
【问题描述】:
我正在构建一个更大的程序,并且我尝试了几种方法(所有这些方法都有效),但我目前喜欢这种方法,尽管我不知道它的某些方面是否代表糟糕的编程习惯.本例中使用的代码只是为了让大家理解这个想法,而无需粘贴整个代码。
这段代码(粘贴在下面)创建了一个带有标签的新 ClassMain 对象和一个编辑标签的静态方法。 ClassEditor 从 ClassMain 实例化,返回一个按钮。
现在我想知道这是否是不好的做法,我在按钮上有一个操作,当单击该按钮时,会调用 ClassMain 中的静态方法并将标签设置为随机数。我想知道这是否是不好的做法的原因是因为我实际上并没有从 ClassMain 对象的直接实例化中调用该方法,我只是这样做:ClassMain.setLabel("");。而且我不完全确定这叫什么。我有一个 ClassMain 实例化,但如果我有多个,它还能工作吗?那么如何通过这种方式而不是使用引用变量来编辑已创建对象的各个方面呢?如果我有多个课程会产生问题吗?
对不起,如果这些问题是漫无边际的,很难准确地问出来。我提供了下面的代码,所以你可以看到我在说什么。
PS:关于是否会出现多个 ClassMain 对象的问题,我创建了另一个,两个窗口中的两个按钮只更新了一个标签。为什么是这样?这是否意味着如果用于一个实例化不是不好的做法,但如果用于更多则不好?我希望有人可以帮助我解决这些问题!
ClassMain:
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class ClassMain extends JFrame {
private static JLabel l;
public static void main(String[] args) {
new ClassMain();
}
public ClassMain() {
super("This is my app");
setSize(450,80);
setLayout(new GridLayout(0,2));
l = new JLabel("Hi");
ClassEditor ce = new ClassEditor();
add(l);
add(ce.getButton());
setVisible(true);
}
public static void setLabel(String stringA) {
l.setText(stringA);
}
}
类编辑器:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class ClassEditor implements ActionListener {
public ClassEditor() {
ClassMain.setLabel("Click the button for a random number!");
}
public JButton getButton() {
JButton b = new JButton("Click me!");
b.addActionListener(this);
return b;
}
public void actionPerformed(ActionEvent arg0) {
int i = (int) (Math.random()*10);
ClassMain.setLabel("Random Number: "+i);
}
}
非常感谢任何可以帮助我的人,非常感谢。只是尝试学习和理解好的做法以及它们为什么起作用。
【问题讨论】:
-
这很好,因为您只有一个标签。相反,您可以考虑只使用
CalssMain.getLabel().setText(text);之类的东西返回标签本身。
标签: java swing class instantiation