java - 使用 for 循环时向 JButton 添加操作

标签 java swing arraylist jpanel jbutton

我正在尝试动态添加按钮 (JButtons),它每次都会更改名称。我用 for 循环来做这件事并不是真的有问题。但是当添加一个 Action 监听器或识别哪个按钮被按下时,事情就不太好了。

MyFrame.java

import javax.swing.*;
import java.awt.event.*;
import java.awt.GridLayout;

public class MyFrame extends JFrame implements ActionListener 
{
    private JPanel panel;
    private static JButton[] buttons  = new JButton[18];
    // set all static calculate JButtons
    private static JButton equalsBtn, addBtn, subBtn, multiBtn, divBtn, clearBtn, plusMinusBtn, decimalBtn;
    // set all static number JBtuttons
    private static JButton zeroBtn, oneBtn, twoBtn, threeBtn, fourBtn, fiveBtn, sixBtn, sevenBtn, eightBtn, nineBtn;
    private static JTextField resultField;
    // numOne is the first row of figures en the second numSecond is the second row
    private static double numOne, numSecond, result;
    private static double plusMinus;
    private static int addClick = 0, subClick = 0, multiClick = 0, divClick = 0;
    private static int clearField;

    public MyFrame() {
        // configure the JFrame
        super("Rekennen maar!");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setSize(230, 370);
        setLocationRelativeTo(null);

        // confugure the JPanel
        panel = new JPanel();
        panel.setSize(230, 370);
        panel.setLayout(new GridLayout(5, 0));

        // array string whit all the button names
        String a_btnNames[] = {"clearBtn", "plusMinusBtn", "divBtn", "multiBtn", "sevenBtn", "eightBtn", "nineBtn", "subBtn", "fourBtn", "fiveBtn", "sixBtn",                               "addBtn", "oneBtn", "twoBtn", "threeBtn", "equalsBtn", "zeroBtn", "decimalBtn"};
        // array String whit all button characters
        String a_btnCharts[] = {"C", "+/-", "/", "*", "7", "8", "9", "-", "4", "5", "6", "+", "1", "2", "3", "=", "0", "."};

        for(int i = 0; i < buttons.length; i++)
        {
            // make new button name 
            buttons[i]  = new JButton(a_btnNames[i]);
            // add button to panel
            panel.add(new JButton(a_btnCharts[i]));
            //System.out.println(buttons[i]);
        }

        // add panel when he's filled 
        add(panel);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        // press the button
        if ( e.getSource() == ...... ) {
            System.out.println("123");  
        }   
    } 
}

主.java

public class Main {
    public static void main(String[] arg) {
        MyFrame mf = new MyFrame();
    }
}

最佳答案

改变循环,像这样。

for(int i = 0; i < buttons.length; i++)
    {
        // make new button name 
        JButton btn = new JButton("" + a_btnNames[i]);
        buttons[i]  = btn;
        btn.addActionListener(this);
        // add button to panel
        panel.add(btn);
        //System.out.println(buttons[i]);
    }

然后有一个像这样的 actionPerformed()。

public void actionPerformed(ActionEvent evt) {
   Object src = evt.getSource();
   if (src == buttons[0]) {
     //First button actions
   } else if (src == buttons[1]) {
     //Second button actions
   }
}

应该可以。

关于java - 使用 for 循环时向 JButton 添加操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20245674/

相关文章:

java - java PermGen 空间是虚拟机总内存的一部分吗?

java - 如何设置最后一行或除最后一行之外的所有行不知道 MigLayout 中的行数?

Java定时器在随机时间后不触发

java - 获取一个ArrayList

java - 有没有办法知道 Subversion 和 Maven 之间的版本要求?

java - 条件断点错误 - 类型未实现选择器最大值和签名

Java DateTime,ParseException 的无法访问的捕获 block

java - JPanel 的大小在 Netbeans 中没有改变

java - 从带有空格的文本文件中读取,然后放入 arrayList

java - hibernate -> ArrayList 无法转换为 Set