我是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 ...
感谢您的帮助,并告诉我,如果我错了!
答案 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();
}
}