编辑:可以在此处找到生成此问题部分的按钮的答案: Array that Holds JButton Objects
我使用for循环生成一些JButtons,每个JButtons都用它们的索引标记。在循环中,我将ActionListener附加到每个按钮。侦听器检索按钮的标签并打印它。目前,返回值的唯一按钮是最后创建的按钮,这是有意义的。我想知道是否有办法以有利的方式进行这种大规模生成,然后进行单独检索。
简称:
在循环中制作一堆带标签的JButton。 单击按钮时打印标签。
以下是我当前流程的简短可执行示例:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
public class calc {
private JFrame mainFrame;
private JPanel mainPanel;
private JButton button;
public calc(){
mainFrame = new JFrame("Calculator");
mainPanel = new JPanel();
for (int i=0; i<10; i++){
int value = i;
String number = Integer.toString(value);
button = new JButton(number);
button.addActionListener(new ButtonListener());
mainFrame.add(button);
}
mainFrame.setLayout(new FlowLayout());
mainFrame.setSize(250, 300);
mainPanel.setLayout(new FlowLayout());
mainFrame.add(mainPanel);
mainFrame.setVisible(true);
}
class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button) {
System.out.println(((JButton) e.getSource()).getText());
}
}
}
}
答案 0 :(得分:2)
您可以创建一个按钮数组,例如:
JButton[] btns = new JButtons[10];
for(int x=0; x<btns.length; x++)
btns[x] = new JButton(x + "");
创建ActionListener:
private class ButtonHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
System.out.println( ((JButton)e.getSource()).getText() );
}
}
将每个按钮添加到ActionListener:
ButtonHandler handler = new ButtonHandler();
for(int x=0=; x<btns.length; x++)
btns[x].addActionListener(handler);
当您单击任何按钮时,它将触发ActionListener并根据单击的按钮,将文本从JButton打印到控制台。