2

これはおそらく初歩的な質問です。しかし、私は絶対初心者のためのJavaプログラミングの第7章を読み終え、課題のセクションに近づきました。チャレンジの質問に明確なボタンを機能させることができません。

質問は尋ねます:

ボタンを使用して編集不可能なTextFieldを更新する数字キーパッドを作成し、クリックした数字を現在の数字の末尾に追加します。フレームにはBorderLayoutを使用します。BorderLayout.NORTHに、TextFieldを配置します。中央に、GridLayoutを使用してボタン1から9を3x3のグリッドに配置するパネルを作成します。BorderLayout.SOUTHで、ゼロキーと、TextFieldの現在の番号を削除する「クリア」キーを持つ別のパネルを作成します。」

私の主な問題は、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());
}
}

何卒よろしくお願い申し上げます。

4

2 に答える 2

1

TextField は、ボタンだけでイベントをリッスンする必要はありません。

最後に数字を追加するには、TextField に既にあるテキストにボタン ラベルを加えたテキストを設定します。

1 つの ActionListener と 1 つの actionPerformed メソッドのみ。ボタンを識別し、TextField を適切に設定します。つまり、c.addActionListener(this);

public void actionPerformed(ActionEvent e)
{
    Button b = (Button) e.getSource();

    if (b.getLabel().equals("Clear"))
    {
        tf.setText("");
    }
    else
    {
        tf.setText(tf.getText() + b.getLabel());
    }
}
于 2012-12-29T02:06:36.137 に答える
0

ActionListener「クリア」ボタンがを呼び出しsetText("")ているように見えますがLabel clear、を呼び出したいと思いますTextField tf

于 2012-12-28T22:28:00.113 に答える