0

我是 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 ......

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

4

3 回答 3

1

在您的Server构造函数中,发送您的History对象的实例(例如new Server (history),然后您可以调用,,history.addToHistoryArea其他选项将具有一个实例到实例变量的setter方法,然后只需调用该方法setshistoryaddToHistoryArea

public class Server{

    private History history;

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

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

另一种方式

public class Server{

    private History history;

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

    public void someMethod(){
        this.history.addToHistoryArea();
    }
}
于 2013-09-14T21:07:26.740 回答
1

在服务器的某个地方,您可以拥有History

public class Server{

    private History history;


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

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

}

或者,如果您不想在 Server 中有实例

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

或者,如果您想更加解耦,您可以使用观察者模式,或者如果他们是同事,也可以使用调解器。

于 2013-09-14T21:07:38.120 回答
0

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

public class Server{

    private History history;

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

    public void methodCall(){
        history.addToHistoryArea();
    }
}
于 2013-09-14T21:08:03.260 回答