Java GUI-记录分配给按钮的编号

Java GUI-记录分配给按钮的编号,java,swing,user-interface,jbutton,Java,Swing,User Interface,Jbutton,有人知道如何将数字存储到JButtons?例如,每次用户按下按钮时,我都要记录该数字 我假设您有一个类,其中有一个您单击的按钮。使此类实现侦听器接口。如果我没有记错的话,接口是ActionListener,方法是actionPerformed。在此方法中,增加该特定按钮的计数器。例如,您可以将数字存储在HashMap中。我假设您有一个类,其中有一个您单击的按钮。使此类实现侦听器接口。如果我没有记错的话,接口是ActionListener,方法是actionPerformed。在此方法中,增加该特

有人知道如何将数字存储到
JButtons
?例如,每次用户按下按钮时,我都要记录该数字

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

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

只需将
ActionListener
链接到按钮,并在每次调用
actionPerformed
callbak时增加一个变量:

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

有关更多详细信息,您可以阅读官方的

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

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

有关更多详细信息,您可以阅读官方的

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

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();
    }   
}

导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
公共类NumberButtons扩展JFrame{
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
新的NumberButtons().setVisible(true);
}
});
}
私有列表按钮=新建ArrayList();
私有ActionListener=新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
int index=buttons.indexOf(e.getSource());
系统输出打印项次(“数字”+索引+“按下”);
}
};
公共数字按钮(){
JPanel pNum=新的JPanel();
pNum.setLayout(新网格布局(3,4));
对于(int i=0;i<10;++i){
JButton b=新JButton(“+i”);
b、 addActionListener(listener);
pNum.添加(b);
按钮。添加(b);
}
添加(pNum);
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这个包();
}   
}

您应该使用ActionListener,您可以使用列表,如下所示:

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();
    }   
}

导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
公共类NumberButtons扩展JFrame{
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
新的NumberButtons().setVisible(true);
}
});
}
私有列表按钮=新建ArrayList();
私有ActionListener=新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
int index=buttons.indexOf(e.getSource());
系统输出打印项次(“数字”+索引+“按下”);
}
};
公共数字按钮(){
JPanel pNum=新的JPanel();
pNum.setLayout(新网格布局(3,4));
对于(int i=0;i<10;++i){
JButton b=新JButton(“+i”);
b、 addActionListener(listener);
pNum.添加(b);
按钮。添加(b);
}
添加(pNum);
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这个包();
}   
}

这里有一个快速的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

下面是一个快速的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

你说的“记录”和“将数字存储到JButtons”是什么意思?我猜你的最终目标不是从JButtons中检索数字。你的问题听起来像是在试图以一种可能迂回的方式实现某件事。从更广泛的意义上讲,你想做什么?本案的具体情况是什么?这些数字需要在哪里结束?store和record都可以引用多种内容。有关可以满足整个规范的代码,请参阅。或此相关。您所说的“record”和“store number to JButtons”是什么意思?我猜您的最终目标不是从JButtons检索数字。你的问题听起来像是在试图以一种可能迂回的方式实现某件事。从更广泛的意义上讲,你想做什么?本案的具体情况是什么?这些数字需要在哪里结束?存储和记录都可以引用多种内容。有关可以满足整个规范的代码,请参阅。或此相关文档。