1

我有两个类 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);
    }
});
4

2 回答 2

2

答案:根本不要在这里使用静态的任何东西。

唯一应该是静态的是您的主要方法,可能就是这样。如果您需要在 GUI 上调用方法,则在可视化 GUI 的实例上调用它,而不是作为静态方法。通常棘手的部分是获得有效的引用,你是正确的,你不应该创建一个新的 GUI 对象,但同样不要尝试做一个不起作用的静态解决方案。获取有效引用的一些方法是通过构造函数参数或 setter 方法。

IE,

public class PrintJFrame extends JFrame {
  private GUI gui;

  public PrintJFrame(GUI gui) {
    this.gui = gui;
  }

  // ...
}

现在,在您的 ActionListener 中,您可以在 gui 变量持有的正确 GUI 引用上调用方法。接下来我们将讨论为什么应该避免让类扩展 JFrame 和类似的 GUI 组件。接下来我们'

于 2012-11-28T03:53:27.790 回答
1

Make a static reference to the instance of your JFrame subclass, with an appropriate instance method on the JFrame to retrieve the text.

于 2012-11-28T03:57:05.717 回答