从表单外部使用setter?

时间:2011-06-19 04:03:50

标签: java text setter

我正在尝试访问一个非静态的表单,这个表单也不是静态的。我想在课堂上使用一名成员....

Public Class MainForm
public void setConsoleText(String Text){
    jTextArea1.append(Text);
}

我需要知道一种从我的类“Log”引用这个setter的方法,它基本上是解析和记录数据的地方。我希望它是这样的:

    private  void consoleOut(String data) {
        System.out.println(data);
        MainForm.setConsoleText("data");
    }

我无法访问此方法..我只能访问MyForm.Class。有没有办法引用已实例化的那个,或者这个虚拟机中的所有实例?这无关紧要,因为在这个Java VM实例中只会运行其中一个。

我似乎无法想出这个。

1 个答案:

答案 0 :(得分:2)

您需要为Log提供一个非静态MainForm变量,并将对当前可视化MainForm对象的引用传递给Log类和此变量。这可以通过Log构造函数参数或通过setter方法完成。然后你可以在这个实例上调用方法(但是先检查它不是null)。类似的东西:

public class Log {
   private MainForm mainForm; // our MainForm variable

   public Log(MainForm mainForm) {
      // setting the MainForm variable to the correct reference in its constructor
      this.mainForm = mainForm;  
   }

   private  void consoleOut(String data) {
     System.out.println(data);
     if (mainForm != null) {
        // now we can use the reference passed in.
        mainForm.setConsoleText("data");
     }
   }
}

修改1

例如,如果您创建MainForm对象并从某个main方法显示它,请随之创建Log并将可视化的MainForm传递给Log构造函数,如下所示:

public static void main(String[] args) {
   MainForm myMainForm = new MainForm();
   // ... whatever code is necessary to set up the 
   // ... MainForm object so it can be visualized
   myMainForm.setVisible(true); // and show it

   Log myLogObject = new Log(myMainForm);
   //...
}

请注意,如果这对您没有帮助,则需要发布更多代码。