Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在按下按钮时更新文本区域?_Java_Jframe_Awt - Fatal编程技术网

Java 如何在按下按钮时更新文本区域?

Java 如何在按下按钮时更新文本区域?,java,jframe,awt,Java,Jframe,Awt,这是我为一个简单的聊天GUI编写的代码,我希望它能让用户点击Send按钮,对文本区域MessageArea进行更改 在ButtonPress事件中,如果您按下Send按钮,它会更改MessageArea,更改MessageArea下面我的面板的颜色,重新验证并重新绘制 单击“发送”时,面板会更改颜色,但文本区域不会更改文本。我做错了什么,我该如何解决 public class BuildWindow extends JFrame implements WindowListener, MouseL

这是我为一个简单的聊天GUI编写的代码,我希望它能让用户点击Send按钮,对文本区域MessageArea进行更改

在ButtonPress事件中,如果您按下Send按钮,它会更改MessageArea,更改MessageArea下面我的面板的颜色,重新验证并重新绘制

单击“发送”时,面板会更改颜色,但文本区域不会更改文本。我做错了什么,我该如何解决

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");
创建一个全新的文本区域。因为它没有添加到容器中,所以它不可见。(旧的仍然可见,因为您没有做任何使其不可见的事情)

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

    欲知详情


    您可能还希望进行通读,这将使人们更容易阅读您的代码,您也更容易阅读他人的代码

    您可以将此问题标记为已解决,这样人们就不会在不需要帮助的地方浪费时间。此外,拉克兰可能会欣赏这些观点。(只是提醒一下!)
    MessageArea = new TextArea("TEST222");