GUI - 记录分配给按钮的数字

时间:2011-11-02 12:39:42

标签: java swing user-interface jbutton

任何人都知道如何将号码存储到JButtons?例如,每次用户按下按钮时,我想记录该号码。

4 个答案:

答案 0 :(得分:3)

你应该使用ActionListener,你可以使用一个列表,如下所示:

enter image description here

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class NumberButtons extends JFrame {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new NumberButtons().setVisible(true);
            }
        });
    }
    private List<JButton> buttons = new ArrayList<JButton>();
    private ActionListener listener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            int index = buttons.indexOf(e.getSource());
            System.out.println("Number " + index + " pressed");         
        }
    };
    public NumberButtons() {
        JPanel pNum = new JPanel();
        pNum.setLayout(new GridLayout(3,4));
        for (int i = 0; i < 10; ++i) {
            JButton b = new JButton("" + i);
            b.addActionListener(listener);
            pNum.add(b);
            buttons.add(b);
        }
        this.add(pNum);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.pack();
    }   
}

答案 1 :(得分:1)

我假设你有一个班级,你点击一个按钮。使此类实现一个侦听器接口。如果我没记错的话,界面是ActionListener,方法是actionPerformed。在此方法中,增加该特定按钮的计数器。例如,您可以将数字存储在HashMap<JButton, Integer>中。

答案 2 :(得分:1)

只需将ActionListener链接到您的按钮,并在每次调用actionPerformed callbak时递增变量:

yourButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        variable++;
    }
});

有关详细信息,请阅读官方documentation

答案 3 :(得分:0)

这是一个快速的JButton子类,可以满足您的需求。是的,它可以在没有子类化的情况下完成,但是如果你想修改JButton的行为(所以它有一个像这种情况一样的附加状态)子类化是一个很好的选择。

public class CountButton extends JButton implements ActionListener {
    private int count;

    CountButton() {
        super();
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        ++count;
    }

    public int getCount() {
        return count;
    }

} // CountButton class