Java 如何在按下按钮时更新文本区域?
这是我为一个简单的聊天GUI编写的代码,我希望它能让用户点击Send按钮,对文本区域MessageArea进行更改 在ButtonPress事件中,如果您按下Send按钮,它会更改MessageArea,更改MessageArea下面我的面板的颜色,重新验证并重新绘制 单击“发送”时,面板会更改颜色,但文本区域不会更改文本。我做错了什么,我该如何解决Java 如何在按下按钮时更新文本区域?,java,jframe,awt,Java,Jframe,Awt,这是我为一个简单的聊天GUI编写的代码,我希望它能让用户点击Send按钮,对文本区域MessageArea进行更改 在ButtonPress事件中,如果您按下Send按钮,它会更改MessageArea,更改MessageArea下面我的面板的颜色,重新验证并重新绘制 单击“发送”时,面板会更改颜色,但文本区域不会更改文本。我做错了什么,我该如何解决 public class BuildWindow extends JFrame implements WindowListener, MouseL
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
}
}
使用:
相反。你以前的台词
MessageArea = new TextArea("TEST222");
创建一个全新的文本区域。因为它没有添加到容器中,所以它不可见。(旧的仍然可见,因为您没有做任何使其不可见的事情)
TextArea
替换为JTextArea
。混合AWT和Swing组件也会导致绘制问题,因为AWT组件没有z顺序的概念。虽然这是“假定”已被修复,但我通常会发现它存在问题,最好干脆避免MouseListener
,这不是管理按钮的方式,我相信即使在AWT中,您也应该使用ActionListener
mouseClicked
方法中创建TextArea
的新实例,MessageArea=newtextarea(“TEST222”)代码>这不是屏幕上显示的内容。相反,使用JTextArea
并使用它的append
方法,messageArea.append(“TEST222\n”)代码>
您可能还希望进行通读,这将使人们更容易阅读您的代码,您也更容易阅读他人的代码您可以将此问题标记为已解决,这样人们就不会在不需要帮助的地方浪费时间。此外,拉克兰可能会欣赏这些观点。(只是提醒一下!)
MessageArea = new TextArea("TEST222");