循环使JButton保持其名称值

时间:2016-05-25 21:57:05

标签: java swing jbutton

编辑:可以在此处找到生成此问题部分的按钮的答案: 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());
          }
      }
   }
}

1 个答案:

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