静态方法分配非静态变量

时间:2012-11-28 03:50:35

标签: java variables methods static

我有两个分支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);
    }
});

2 个答案:

答案 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上使用适当的实例方法来检索文本。