我有两个分支GUI(渲染我的主JFrame)和Print类(由GUI类上的JButton调用)。现在在我的GUI类上我有JTextArea和一个方法:
void setOutput(String data)
{
// output is JTextArea
output.setText(data);
}
然而,数据是在Print JFrame中提供的,其中我有一个带有动作监听器的JButton:
sizOpt.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
// textfield is a JTextField component
String data = textfield.getText();
// My problem is here i need to invoke the setOutput
// method in GUI to output the string however i cant call that method in
// any way but making it static or calling new GUI which will create a new
// Instance of GUI class
GUI.setOutput(data);
}
});
答案 0 :(得分:2)
答案:不要在这里使用静态的东西。
唯一应该是静态的是你的主要方法,这可能是它。如果需要在GUI上调用方法,则在可视化GUI的 实例 上调用它,而不是静态方法。通常棘手的部分是获得有效的引用,并且您不应该创建新的GUI对象,但是再次尝试不执行非工作的静态解决方案。获取有效引用的一些方法是通过构造函数参数或setter方法。
即,
public class PrintJFrame extends JFrame {
private GUI gui;
public PrintJFrame(GUI gui) {
this.gui = gui;
}
// ...
}
现在,在ActionListener中,您可以在gui变量持有的正确GUI引用上调用方法。接下来我们将讨论为什么要避免让类扩展JFrame和类似的GUI组件。 接下来我们
答案 1 :(得分:1)
对JFrame子类的实例进行静态引用,在JFrame上使用适当的实例方法来检索文本。