如何在按下按钮时更新TextArea?

时间:2015-01-30 03:48:37

标签: java jframe awt

这是我的简单聊天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
    }
}

2 个答案:

答案 0 :(得分:1)

使用:

MessageArea.setText("TEST222");

代替。你以前的那条线,

MessageArea = new TextArea("TEST222");

创建全新的TextArea 。由于它没有添加到容器中,因此不可见。 (并且旧的仍然是可见的,因为你没有做任何会使它不可见的事情)

答案 1 :(得分:1)

  1. 您正在混合重量级(AWT)和轻量级组件(Swing)。由于AWT在15年前被Swing取代,我建议改用它。将TextArea替换为JTextArea。混合AWT和Swing组件也会导致绘制问题,因为AWT组件没有z排序的概念。虽然这是“假设”已经修复,但我一般都发现它存在问题,最好避免使用。
  2. 您在按钮上使用了MouseListener,这不是按钮的管理方式,我相信即使在AWT中,您也应该使用ActionListener
  3. 您正在使用TextArea方法创建mouseClicked的新实例,MessageArea = new TextArea("TEST222");这不是屏幕上显示的内容。相反,请使用JTextArea并使用append方法,messageArea.append("TEST222\n");
  4. 看看:

    了解更多详情

    您可能还希望阅读Code Conventions for the Java TM Programming Language,这样可以让人们更轻松地阅读您的代码并让您阅读其他代码