【问题标题】:Java GUI - How to append text to JTextArea from a static method?Java GUI - 如何从静态方法将文本附加到 JTextArea?
【发布时间】:2015-07-06 14:10:35
【问题描述】:

我正在做一个关于使用 Java IO 进行客户端-服务器聊天的简单练习。这是我的代码结构:

public class ChatRoomClientGUI{
    private JTextArea textAreaMessages;
    private JTextField textFieldMessage;
    private JButton buttonSendMsg;
    //...
    private static Socket socket = null;
    private static Scanner input = null;
    private static PrintWriter output = null;
    //...
    private static void handleInputStream(){
        String response = input.nextLine();
        textAreaMessages.append(response + "\n"); // Error here
    }
}

我现在面临的问题是我无法访问textAreaMessages 变量,因为它是非静态,而handleInputStream() 方法是静态强>。我已经尝试了一些方法,但它们都不起作用:

  • textAreaMessages; 更改为private static JTextArea textAreaMessages; => 我的IDE (IntelliJ IDEA) 在我运行程序时产生错误
  • handleInputStream() 更改为 非静态 方法 => 这也不起作用,因为我从静态上下文中调用此方法并且无法更改。

那么有什么想法可以解决这个问题吗?

非常感谢!

【问题讨论】:

  • 你能再显示一些代码吗?
  • 您可以使用:StringBuffer sb = new StringBuffer("Test"); sb.append(" String Buffer"); 并将“sb”绑定到您的文本区域

标签: java user-interface intellij-idea static non-static


【解决方案1】:

相当难看,但是如果你确定你的对象只有一个实例,然后修改(或添加)构造函数以将静态变量设置为this:

private static ChatRoomClientGUI singleton;
...
public ChatRoomClientGUI() {
    singleton = this;
    ...
}

private static void handleInputStream(){
    String response = input.nextLine();
    singleton.textAreaMessages.append(response + "\n");
}

【讨论】:

    【解决方案2】:

    您可以为私有 JTextArea textAreaMessages; 创建 getter 和 setter,并在调用 handleInputStream() 时传递此类的实例并调用 setter 以附加文本。

    private static void handleInputStream(ChatRoomClientGUI gui) {
        String response = input.nextLine();
        gui.getTextField().append(response + "\n"); // Error here
    }
    
    public void setTextField(JTextField textField) {
        this.textAreaMessages = textField;
    }
    
    public JTextField getTextField() {
        return textAreaMessages;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多