0
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calculator extends JFrame implements ActionListener{
    JButton[] nums;
    JButton eq, mult, div, clr, clrEnt, sub, add, dot;
    JTextArea txtArea = new JTextArea();

    public Calculator() {
        super("Calculator");
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel pane = new JPanel(new GridLayout(6, 1, 0, 5));
        add(pane);
        JPanel paneSecond = new JPanel(new GridLayout(1, 3, 5, 5));
        JPanel paneThird = new JPanel(new GridLayout(1, 3, 5, 5));
        JPanel paneFourth = new JPanel(new GridLayout(1, 3, 5, 5));
        JPanel paneFifth = new JPanel(new GridLayout(1, 3, 5, 5));
        JPanel paneSixth = new JPanel(new GridLayout(1, 3, 5, 5));
        JPanel paneSeventh = new JPanel(new GridLayout(1, 3, 5, 5));
        nums = new JButton[11];
        //add = new JButton();
        addOpButton(eq, "=");
        addOpButton(mult, "x");
        addOpButton(div, "/");
        addOpButton(clr, "C");
        addOpButton(clrEnt, "CE");
        addOpButton(sub, "-");
        addOpButton(add, "+");
        addOpButton(dot, ".");

        for (int i = 0; i < nums.length; i++) {
            nums[i] = new JButton("" + i);
            nums[i].setActionCommand(nums[i].toString());
            nums[i].addActionListener(this);
        }

        addPanel(paneSecond, 1, 4);
        addPanel(paneThird, 4, 7);
        addPanel(paneFourth, 7, 10);
        //addButtons(paneFifth, add, nums[0], sub);
        pane.add(paneSecond);
        pane.add(paneThird);
        pane.add(paneFourth);
        pane.add(paneFifth);
        pane.add(paneSixth);
        pane.add(paneSeventh);
        pack();
    }

    void addPanel(JComponent pane, int start, int condition) {
        for (int i = start; i < condition; i++) {
            pane.add(nums[i]);
        }
    }

    void addButtons(JComponent pane, JButton btn1, JButton btn2, JButton btn3) {
        pane.add(btn1);
        pane.add(btn2);
        pane.add(btn3);
    }

    void addOpButton(JButton btn, String op) {
        btn = new JButton(op);
        btn.setActionCommand(op);
        btn.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
    }

    public static void main(String[] args) {
        Calculator calc = new Calculator();
    }
}

addOpButton メソッドでは、どのボタンも初期化されていません。理由はわかりませんが。文字列は渡されて使用されていますが、ボタンは使用されていません。ボタンの 1 つ (コメントを削除したコンストラクターの「追加」ボタン) を初期化した後でも、ボタンはメソッド内でまだ null です。理由がわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

4

Javaは「値渡し」です。つまり、参照を渡そうとすると、参照がコピーされてから渡されます。

実際には、これはbtnaddOpButton に与えるパラメータがコピーであり、他のコピーはメソッドを呼び出した人によって保持されることを意味します。次にbtn = new、コピーに何かを割り当て、コマンドとアクションリスナーを与え、それを破棄します。呼び出し元はまだ自分のコピーへの参照を持っています。

于 2013-08-11T22:40:03.513 に答える