从另一个类访问对象方法

时间:2013-09-14 21:03:56

标签: java inheritance getter-setter

我是Java和面向对象的新手,我正在尝试创建一个聊天程序。这就是我想要做的事情:

我的Main.java中的某个地方

Window window = new Window;

我的Window.java中的某个地方

History history = new History()

我的History.java中的某个地方:

public History()
{
    super(new GridBagLayout());

    historyArea = new JTextArea(15, 40);
    historyArea.setEditable(false);
    JScrollPane scrollPane = new JScrollPane(historyArea);

    /* some other code... */
}

public void actionPerformed(ActionEvent event)
{
    String text = entryArea.getText();
    historyArea.append(text + newline);
    entryArea.selectAll();
    historyArea.setCaretPosition(historyArea.getDocument().getLength());
}

public JTextArea getHistoryArea()
{
    return historyArea;
}

public void addToHistoryArea(String pStringToAdd)
{
    historyArea.append(pStringToAdd + newline);
    historyArea.setCaretPosition(historyArea.getDocument().getLength());
}

现在我在Server.java中,我想使用addToHistoryArea方法。如果不使我的historyArea静态,我怎么能这样做呢?因为如果我很清楚静态是如何工作的,即使我创建了一个新的历史记录,我也无法拥有不同的historyArea ...

感谢您的帮助,并告诉我,如果我错了!

3 个答案:

答案 0 :(得分:1)

Server构造函数中,发送History对象的实例(例如new Server (history),然后您可以调用history.addToHistoryArea,其他选项将有{ {1}} setter实例变量的sets实例,然后只调用history方法

的方法
addToHistoryArea

另一种方式

public class Server{

    private History history;

    public Server(History history){
        this.history = history;
    }

    public void someMethod(){
        this.history.addToHistoryArea();
    }
}

答案 1 :(得分:1)

在服务器的某个位置,您可以拥有History

public class Server{

    private History history;


    public void setHistory(History history){
      this.history= history;
    }

    public void someMethod(){
      history.addToHistoryArea();
    }

}

或者如果您不想在服务器中有实例

public void someMethod(History history){
      history.addToHistoryArea();
}

或者如果你想要更加分离,你可以采用观察者模式,或者如果他们是同事,也可以采用调解员。

答案 2 :(得分:0)

您可能希望在History类中创建Server对象,然后在该addToHistoryArea()实例上调用history方法。

public class Server{

    private History history;

    public void setHistory(History history){
        this.history = history;
    }

    public void methodCall(){
        history.addToHistoryArea();
    }
}