0

私は Java プログラミングが初めてです。ボタンが押されたとき、つまり添付コードの JFrame に表示された 0-9 から、そのボタンの値を、ボタンが押される前に選択された JField に割り当てる必要があるようなタスクを実行したいと考えています。 .その方法は?

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

class calci2 extends JFrame implements ActionListener {
    JFrame f1;
    JPanel p;
    JButton b[] = new JButton[10];
    JButton btnadd;
    JButton btnmul;
    JButton btndiv;
    JButton btnsub;
    public static JTextField t1;
    JTextField t2;
    JTextField t3;
    JLabel no1;
    JLabel no2;
    JLabel res;

    calci2() {
        f1 = new JFrame();
        p = new JPanel();
        t1 = new JTextField(15);
        t2 = new JTextField(15);
        t3 = new JTextField(15);
        no1 = new JLabel("Enter 1st number");
        no2 = new JLabel("Enter 2nd number");
        res = new JLabel("    Result is        ");
        btnadd = new JButton("ADD");
        btnmul = new JButton("MUL");
        btndiv = new JButton("DIV");
        btnsub = new JButton("SUB");
        for (int i = 0; i < 10; i++) {
            b[i] = new JButton("" + i);
        }
        btnadd.addActionListener(this);
        btnmul.addActionListener(this);
        btndiv.addActionListener(this);
        btnsub.addActionListener(this);

        for (int i = 0; i < 10; i++) {
            b[i].addActionListener(this);
        }
        p.add(no1);
        p.add(t1);
        p.add(no2);
        p.add(t2);
        p.add(res);
        p.add(t3);
        p.add(btnadd);
        p.add(btnmul);
        p.add(btndiv);
        p.add(btnsub);

        for (int i = 0; i < 10; i++) {
            p.add(b[i]);
        }
        this.add(p);
    }

    public static void main(String args[]) {
        calci2 c = new calci2();
        c.setDefaultCloseOperation(EXIT_ON_CLOSE);
        c.setSize(300, 300);
        c.setVisible(true);
        c.setResizable(false);
        c.setLocationRelativeTo(null);
    }

    public void actionPerformed(ActionEvent e) {
        String str = e.getActionCommand();
        String s1 = new String(t1.getText());
        String s2 = new String(t2.getText());
        String s3 = new String();
        int a = Integer.parseInt(s1);
        int b = Integer.parseInt(s2);
        if (str.equals("ADD")) {
            int c = a + b;
            s3 = String.valueOf(c);
            t3.setText(s3);
        }

        else if (str.equals("SUB")) {
            int c = a - b;
            s3 = String.valueOf(c);
            t3.setText(s3);
        }

        else if (str.equals("MUL")) {
            int c = a * b;
            s3 = String.valueOf(c);
            t3.setText(s3);
        }

        else if (str.equals("DIV")) {
            int c = a / b;
            s3 = String.valueOf(c);
            t3.setText(s3);
        }
    }
};
4

1 に答える 1

1

現在選択されているテキスト フィールドを確認するには、t1 と t2 のクラスに 2 つのブール値を作成します。t3 に 3 つ目のブール値は必要ないと思います

まあ言ってみれば :

 boolean t1_selected = false;
 boolean t2_selected = false;

次に、Const に別のリスナーを追加します。フォーカスリスナーであるテキストフィールドに、テキストフィールドがフォーカスされるとフォーカスリスナーが起動し、そこでこのテキストのブール値を true に変更できます

        t1.addFocusListener(new FocusListener() {

        @Override
        public void focusLost(FocusEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void focusGained(FocusEvent arg0) {
            // TODO Auto-generated method stub
            t1_selected = true;
            t2_selected = false;
        }
    });
    t2.addFocusListener(new FocusListener() {

        @Override
        public void focusLost(FocusEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void focusGained(FocusEvent e) {
            // TODO Auto-generated method stub
            t1_selected = false;
            t2_selected = true;
        }
    });

ボタンについては、すべてのボタンで e.getActionCommand() の代わりに e.getSource() を使用して、関数 actionPerformed でイベントのソースを確認する必要があります。

例えば:

    if(e.getSource() == this.b[0]){
        if(t1_selected)
        {
            t1.setText("0");
        }
        if(t2_selected)
        {
            t2.setText("0");
        }
    }
    else if(e.getSource() == this.b[1]){
        if(t1_selected)
        {
            t1.setText("1");
        }
        if(t2_selected)
        {
            t2.setText("1");
        }
    }
            //rest of cases

また、これらの行を関数の先頭に置かないでください

        String s1 = new String(t1.getText());
        String s2 = new String(t2.getText());
        String s3 = new String();
        int a = Integer.parseInt(s1);
        int b = Integer.parseInt(s2);

テキストフィールドが空の場合は例外を通過し、ADD、SUB、DIV、および MUL のケース内にのみ配置します。

例えば ​​:

  else if (e.getSource() == btnadd) {
        String s1 = new String(t1.getText());
        String s2 = new String(t2.getText());
        String s3 = new String();
        int a = Integer.parseInt(s1);
        int b = Integer.parseInt(s2);

        int c = a + b;
        s3 = String.valueOf(c);
        t3.setText(s3);
    }

ところで、投稿する前にコードをインデントする必要があります。質問をきれいにするのはあなたの仕事です

于 2013-07-13T05:42:42.590 に答える