循环制作保存其名称值的 JButton

Looping to make JButtons that hold their name values

编辑:这个问题的按钮生成部分的答案可以在这里找到: Array that Holds JButton Objects

我使用 for 循环生成了一些 JButton,每个 JButton 都标有它们的索引。在循环中,我将 ActionListener 附加到每个按钮。侦听器检索按钮的标签并将其打印出来。目前,唯一一个 returns 值的按钮是最后创建的,这是有道理的。我想知道是否有一种方法可以进行这种大规模生成,然后以有利的方式进行个人检索。

简而言之:

循环制作一堆带标签的 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());
          }
      }
   }
}

您可以创建一个按钮数组,例如:

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 打印到控制台。