我正在尝试动态添加按钮 (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/