我在JTextArea中设置文本有问题,我尝试了setText(我更喜欢)并追加。我不知道问题出在哪里,我得到了客户端 - 服务器应用程序。我想把服务器发送的消息放在JTextField中,但我不能在这里找到我的代码:
正确收发邮件的客户端代码:
try
{
Socket socket = new Socket("localhost", PORT);
BufferedReader input = new BufferedReader( new InputStreamReader(System.in));
DataOutputStream output = new DataOutputStream(socket.getOutputStream());
BufferedReader serverInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));
output.writeBytes(outputString + "\n");
inputString = serverInput.readLine(); // private String inputString
mymodel.setTextArea(inputString); // this is not working
System.out.println(inputString); // this is working
socket.close();
}
catch...
setTextArea方法:
public void setTextArea(String string)
{
MyPanel mypanel = new MyPanel();
mypanel.textArea.setText(string); // debugger shows that the string contains message from server
}
我已经将textarea设置为public,因为setter方法不起作用,实际上这个也没有用。我不知道问题出在哪里,调试器也没有帮助我。
寻找答案
编辑:
JTextTable代码:
textArea = new JTextArea(1, 30);
textArea.setEditable(false);
panel.add(textArea, c);
答案 0 :(得分:2)
每次调用MyPanel
方法时,您都在创建setTextArea
的新实例,这意味着屏幕上的内容不会用于应用您发送它的文本
相反,您应该使用您创建的MyPanel
的原始实例在屏幕上显示...
也无法确定您是从事件调度线程的内容调用阻塞I / O还是从其他线程与UI交互。在任何一种情况下,都是非常不受推荐的
请查看Concurrency in Swing了解详情
答案 1 :(得分:1)
有两个主要问题:
您在与IO相同的线程上执行UI修改,这是您永远不应该做的。考虑使用SwingWorker
进行I / O操作。
在setTextArea
中,您没有访问已有的MyPanel
实例,而是创建一个新实例。因此,更改不会在您已经拥有的MyPanel
实例中完成...
答案 2 :(得分:1)
JTextArea t=new JTextArea();
t.append("Text");
no Method in java to set Text for JTextArea.
the append method to add text in JTextArea
答案 3 :(得分:0)
尝试通过getter访问。 喜欢
public JTextArea getTextArea()
{
return jTextAreaField;
}
然后
getTextArea().append("ur text");