我对如何在Java中实现GUI感到困惑,因为有许多不同的方法。这个线程已经描述了这些正确的习惯:Java/Swing GUI best practices (from a code standpoint) 但我很困惑,因为在使用这种方法时,Netbeans在超类中调用的函数旁边说“构造函数中的可覆盖方法调用”。
我不问如何使用GUI或如何实现它们,但我要求实现它们的正确方法。我对这种格式持怀疑态度,因为出现了这个错误。运行这种格式的程序没问题。至少在节目非常小而且简单的时候。
我从上面提到的帖子中得到了这个示例代码:
public class Main {
public static void main(String[] args) {
final String text = args[0];
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final MyWindow wnd = new MyWindow(text);
wnd.setVisible(true);
}
});
}
}
public class MyWindow extends JFrame {
public MyWindow(String text) {
super("My Window");
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); //Overridable method call in constructor
addWindowListener(new WindowAdapter() { //Overridable method call in constructor
@Override
public void windowClosing(WindowEvent e) {
MyWindow.this.setVisible(false);
MyWindow.this.dispose();
}
});
final JButton btn = new JButton(text);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(MyWindow.this, "Button Pressed", "Hey", JOptionPane.INFORMATION_MESSAGE);
}
});
setLayout(new FlowLayout());
add(btn);
pack();
}
}
此错误发生在构造函数中继承和使用的任何其他方法。我知道这个帖子解释了为什么不这样做:What's wrong with overridable method calls in constructors?所以现在我问,这仍然是正确的风格吗?在实现GUI时这是否合适?
注意:不是一个非常有经验的程序员,所以我希望我正确地说明了一切。我想从一开始就学习这种方式的正确方式。
答案 0 :(得分:0)
为避免在JFrame构造函数中放置一个可覆盖的方法,您必须在构造函数外部进行所有JFrame初始化,即:在main函数中。这通常是不好的做法,因为它可能导致帧的不同实例之间出现差异。所以是的,你做的一切都是正确的。 Netbeans有时会显示一些愚蠢的警告。