1

ActionListenerの実装をGUIクラスから分離したい場合、ActionListenerを理解するのに少し問題がありますが、どうすればよいですか?プログラムはシンプルな計算機です。ボタンのみを持つGUIクラス(Boundary)と、すべてのアクションイベント(ボタンの押下)を処理する別のクラス(Control)について考えようとしています。Controlタイプのプライベート変数を作成して、このように機能させることはできますか?あなたが方法を知っているなら助けてください:)

コントロールクラス

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.*;
import java.awt.*;


public class Boundary extends JFrame {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private JPanel northPanel;
    private JPanel southPanel;
    private Control control;

    public Boundary()
    {
        super("Calculator");

        getContentPane().setLayout(new BorderLayout());

        northPanel = new JPanel(); northPanel.setLayout(new BorderLayout());
        southPanel = new JPanel(); southPanel.setLayout(new GridLayout(4,4));
        control = new Control();

        JTextField numberField = new JTextField(20);
        JTextField operationField = new JTextField(1);

        JButton button1 = new JButton("1");
        JButton button2 = new JButton("2");
        JButton button3 = new JButton("3");
        JButton button4 = new JButton("4");
        JButton button5 = new JButton("5");
        JButton button6 = new JButton("6");
        JButton button7 = new JButton("7");
        JButton button8 = new JButton("8");
        JButton button9 = new JButton("9");
        JButton button0 = new JButton("0");
        JButton buttonequal = new JButton("=");
        JButton buttonclear = new JButton("C");
        JButton buttonplus = new JButton("+");
        JButton buttonminus = new JButton("-");
        JButton buttondivide = new JButton("/");
        JButton buttonmultiply = new JButton("*");

        button1.addActionListener(control);
        button2.addActionListener(control);
        button3.addActionListener(control);
        button4.addActionListener(control);
        button5.addActionListener(control);
        button6.addActionListener(control);
        button7.addActionListener(control);
        button8.addActionListener(control);
        button9.addActionListener(control);
        button0.addActionListener(control);
        buttonequal.addActionListener(control);
        buttonclear.addActionListener(control);
        buttonplus.addActionListener(control);
        buttonminus.addActionListener(control);
        buttondivide.addActionListener(control);
        buttonmultiply.addActionListener(control);


        northPanel.add(numberField, BorderLayout.CENTER);
        northPanel.add(operationField, BorderLayout.EAST);

        southPanel.add(button1);
        southPanel.add(button2);
        southPanel.add(button3);
        southPanel.add(buttondivide);
        southPanel.add(button4);
        southPanel.add(button5);
        southPanel.add(button6);
        southPanel.add(buttonmultiply);
        southPanel.add(button7);
        southPanel.add(button8);
        southPanel.add(button9);
        southPanel.add(buttonminus);
        southPanel.add(buttonclear);
        southPanel.add(button0);
        southPanel.add(buttonequal);
        southPanel.add(buttonplus);

        numberField.setVisible(true);
        numberField.setEditable(false);
        operationField.setVisible(true);
        operationField.setEditable(false);







        getContentPane().add(northPanel, BorderLayout.NORTH);
        getContentPane().add(southPanel, BorderLayout.CENTER);

        setLocation(300,300);
        setSize(400,400);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

コントロールクラス

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;


public class Control implements ActionListener {

    private JButton button;

    Control()
    {

    }

    @Override
    public void actionPerformed(ActionEvent arg0) {


    }

}
4

1 に答える 1

1

一連のifステートメントで、「アクション コマンド」を確認します。

public void actionPerformed(ActionEvent evt) {
    String cmd = evt.getActionCommand();

    if("1".equals(cmd))
        // button1 was pressed
    else if("2".equals(cmd))
        // button2 was pressed
    . . .

示唆されているように、 anActionはすべてを個別に保持するため、読みやすくなります。を使用する方法は次Actionのとおりです(またはサブクラスAbstractActionです):

Action button1 = new AbstractAction("1") {
    public void actionPerformed(ActionEvent evt){
        // button one pressed
    }
};
Action button2 = new AbstractAction("2") {
    public void actionPerformed(ActionEvent evt){
        // button two pressed
    }
};

southPanel.add(button1);
southPanel.add(button2);

メソッドはadd、それを に変換しJButton、リスナーとして設定します。

于 2013-03-14T01:51:05.213 に答える