Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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编程挑战:创建类似GUI计算器的界面_Java_User Interface_Event Handling_Append_Textfield - Fatal编程技术网

Java编程挑战:创建类似GUI计算器的界面

Java编程挑战:创建类似GUI计算器的界面,java,user-interface,event-handling,append,textfield,Java,User Interface,Event Handling,Append,Textfield,这可能是一个基本问题。然而,我已经读完了Java编程的第七章,并且已经进入了挑战部分。我不太清楚这个挑战问题的答案 问题是: 创建一个数字小键盘,该小键盘使用按钮更新不可编辑的文本字段,方法是将单击的数字追加到当前数字的末尾。对框架使用边框布局。在BorderLayout.NORTH中,放置文本字段。在中间,创建一个面板,该面板使用GridLayout在三乘三的网格中布局按钮1到9。在BorderLayout.SOUTH,创建另一个面板,该面板具有零键和删除文本字段中当前数字的“清除”键。” 我

这可能是一个基本问题。然而,我已经读完了Java编程的第七章,并且已经进入了挑战部分。我不太清楚这个挑战问题的答案

问题是:

创建一个数字小键盘,该小键盘使用按钮更新不可编辑的文本字段,方法是将单击的数字追加到当前数字的末尾。对框架使用边框布局。在BorderLayout.NORTH中,放置文本字段。在中间,创建一个面板,该面板使用GridLayout在三乘三的网格中布局按钮1到9。在BorderLayout.SOUTH,创建另一个面板,该面板具有零键和删除文本字段中当前数字的“清除”键。”

我认为我的主要问题是在TextArea append方法中。我知道我应该使用TextField,但是根据我所做的研究,似乎不可能在TextField中追加

这个问题的答案可能有助于许多新的Java程序员理解基本的GUI和事件处理

import java.awt.*;
import java.awt.event.*;

public class CalcFacade extends GUIFrame
                                    implements ActionListener, TextListener {

TextField tf;
TextArea ta;
Panel p1, p2;
Label clear;
Button b1, b2, b3, b4, b5, b6, b7, b8, b9, c, b0;
public CalcFacade() {
    super("Calculator Facade");
    setLayout(new BorderLayout());

Button b1 = new Button("1");
b1.addActionListener(this);
Button b2 = new Button("2");
b2.addActionListener(this);
Button b3 = new Button("3");
b3.addActionListener(this);
Button b4 = new Button("4");
b4.addActionListener(this);
Button b5 = new Button("5");
b5.addActionListener(this);
Button b6 = new Button("6");
b6.addActionListener(this);
Button b7 = new Button("7");
b7.addActionListener(this);
Button b8 = new Button("8");
b8.addActionListener(this);
Button b9 = new Button("9");
b9.addActionListener(this);

Button b0 = new Button("0");
b0.addActionListener(this);

Button c = new Button("Clear");
c.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    clear.setText("");
}
});
    tf = new TextField(100);
add(tf);
tf.setEnabled(false);
tf.addActionListener(this);
tf.addTextListener(this);
setVisible(false);

ta = new TextArea("", 10, 30);
    add(ta);
    ta.setEnabled(true);
    setVisible(true);


Panel p1 = new Panel();
p1.setLayout(new GridLayout(3, 3));
p1.setBackground(Color.gray);
p1.add(b1);
p1.add(b2);
p1.add(b3);
p1.add(b4);
p1.add(b5);
p1.add(b6);
p1.add(b7);
p1.add(b8);
p1.add(b9);

Panel p2 = new Panel();
p2.setBackground(Color.gray);
p2.add(b0);
p2.add(c);

add(ta, BorderLayout.NORTH);
add(p1, BorderLayout.CENTER);
add(p2, BorderLayout.SOUTH);

pack();
setSize(400, 300);
setVisible(true);
}

public static void main(String args[]) {
    CalcFacade cf = new CalcFacade();
}
public void actionPerformed(ActionEvent e) {
   tf.setText(""
    +((Button)e.getSource()).getLabel());
}

public void textValueChanged(TextEvent e) {
    ta.append(tf.getText());
}
}

我提前非常感谢您的帮助。

看起来像是
ActionListener
因为您的“清除”按钮正在调用
setText(“”)
标签清除
上,当我猜您想在
文本字段tf
上调用它时,文本字段不需要侦听事件,只需按按钮即可

要在末尾添加数字,只需将文本设置为文本字段中已有的内容加上按钮标签

只有一个ActionListener和一个actionPerformed方法;识别按钮并适当设置文本字段,即c.addActionListener(此)


要附加,请将文本设置为以前存在的内容+按下按钮的标签:
tf.setText(tf.getText()+((按钮)e.getSource()).getLabel())
。清除按钮只需将文本字段设置为空值
tf.setText(“”
),然后单击此链接。这可能会帮助您解决问题。
public void actionPerformed(ActionEvent e)
{
    Button b = (Button) e.getSource();

    if (b.getLabel().equals("Clear"))
    {
        tf.setText("");
    }
    else
    {
        tf.setText(tf.getText() + b.getLabel());
    }
}