这是我的简单聊天GUI的代码,我希望它能让用户点击发送按钮,对TextArea进行更改,称为MessageArea。
在ButtonPress事件中,如果按“发送”按钮,它将更改MessageArea,更改MessageArea下方面板的颜色,重新验证和重新绘制。
单击“发送”时,面板会更改颜色,但TextArea不会更改文本。我做错了什么,我该如何解决这个问题?
public class BuildWindow extends JFrame implements WindowListener, MouseListener, KeyListener {
private TextArea MessageArea = null; //the chat window?
private TextField SendArea = null; // where you type in your message
private String Username = null; //username
private Button Send, Clear;
private final static String newline = "\n";
private Panel p = null;
BuildWindow(String s) {
super(s);
this.addWindowListener(this);
this.setSize(800,600);
this.setResizable(true);
this.setLayout(new BorderLayout());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MessageArea = new TextArea("little test");
MessageArea.setEditable(false);
this.add(MessageArea, "Center");
MessageArea.setFont(new Font("Arial", Font.PLAIN, 16));
p = new Panel();
p.setLayout(new FlowLayout());
SendArea = new TextField(30);
SendArea.addKeyListener(this);
SendArea.setFont(new Font("Arial", Font.PLAIN, 16));
p.add(SendArea);
p.setBackground(new Color(221,221,221));
Send = new Button("Send");
Send.addMouseListener(this);
p.add(Send);
Clear = new Button("Clear");
Clear.addMouseListener(this);
p.add(Clear);
this.add(p, "South");
this.setVisible(true);
SendArea.requestFocus();
}
public void mouseClicked(MouseEvent arg0) {
if (arg0.getSource() == Send) {
MessageArea = new TextArea("TEST222"); //what i want to see change but dont
p.setBackground(new Color(011,011,011));// what i do see change
revalidate();
repaint();
}
if (arg0.getSource() == Clear) {
//add to list
}
}
答案 0 :(得分:1)
使用:
MessageArea.setText("TEST222");
代替。你以前的那条线,
MessageArea = new TextArea("TEST222");
创建全新的TextArea 。由于它没有添加到容器中,因此不可见。 (并且旧的仍然是可见的,因为你没有做任何会使它不可见的事情)
答案 1 :(得分:1)
TextArea
替换为JTextArea
。混合AWT和Swing组件也会导致绘制问题,因为AWT组件没有z排序的概念。虽然这是“假设”已经修复,但我一般都发现它存在问题,最好避免使用。MouseListener
,这不是按钮的管理方式,我相信即使在AWT中,您也应该使用ActionListener
TextArea
方法创建mouseClicked
的新实例,MessageArea = new TextArea("TEST222");
这不是屏幕上显示的内容。相反,请使用JTextArea
并使用append
方法,messageArea.append("TEST222\n");
看看:
了解更多详情
您可能还希望阅读Code Conventions for the Java TM Programming Language,这样可以让人们更轻松地阅读您的代码并让您阅读其他代码