有没有更快的方法来创建 12 个按钮?
Is there a faster way to create 12 buttons?
我正在执行一项任务,我需要创建一个带有 12 个按钮的 3x4 GridLayout。任务是当我单击任何按钮时,所有其他按钮将值更改为 1。现在,我是这样做的:
JFrame frame=new JFrame();
frame.setSize(300,200);
frame.setLayout(new GridLayout(3,4));
JButton b1=new JButton("1");
JButton b2=new JButton("2");
JButton b3=new JButton("3");
JButton b4=new JButton("4");
JButton b5=new JButton("5");
JButton b6=new JButton("6");
JButton b7=new JButton("7");
JButton b8=new JButton("8");
JButton b9=new JButton("9");
JButton b10=new JButton("10");
JButton b11=new JButton("11");
JButton b12=new JButton("12");
b1.addActionListener(lambdaExpression -> {
b2.setText("1");
b3.setText("1");
b4.setText("1");
b5.setText("1");
b6.setText("1");
b7.setText("1");
b8.setText("1");
b9.setText("1");
b10.setText("1");
b11.setText("1");
b12.setText("1");
});
b2.addActionListener(lambdaExpression -> {
b1.setText("1");
b3.setText("1");
b4.setText("1");
b5.setText("1");
b6.setText("1");
b7.setText("1");
b8.setText("1");
b9.setText("1");
b10.setText("1");
b11.setText("1");
b12.setText("1");
});
b3.addActionListener(lambdaExpression -> {
b1.setText("1");
b2.setText("1");
b4.setText("1");
b5.setText("1");
b6.setText("1");
b7.setText("1");
b8.setText("1");
b9.setText("1");
b10.setText("1");
b11.setText("1");
b12.setText("1");
});
.
.
.
frame.add(b1);
frame.add(b2);
frame.add(b3);
.
.
.
frame.pack();
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
我的问题是 - 有没有比将相同的行复制 12 次更快的方法?我在 Java 的编程方面相当陌生,所以任何见解都会有所帮助,谢谢!
将按钮放在数组中会有很大帮助
final JButton[] buttons = new JButton[12];
final ActionListener myListener = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
for (int i = 0; i < buttons.length; i++) {
if (buttons[i] != ae.getSource()) {
buttons[i].setText("1");
}
}
}
}
for (int i = 0; i < 12; i++) {
buttons[i] = new JButton();
buttons[i].setName("Button " + (i + 1));
buttons[i].addActionListener(myListener);
}
有时在这种情况下使用一种方法会有所帮助。特别是如果要用在别处。
for (int i = 1; i <= 12; i++) {
frame.add(createButton(i+"", "1"));
}
public static JButton createButton(String name, String init) {
JButton b = new JButton(name);
b.addActionListener(ae->b.setText(init));
return b;
}
可以添加或更正其他参数,但它给了你想法。如果需要,您还可以将 lambda 表达式传递给该方法。
我正在执行一项任务,我需要创建一个带有 12 个按钮的 3x4 GridLayout。任务是当我单击任何按钮时,所有其他按钮将值更改为 1。现在,我是这样做的:
JFrame frame=new JFrame();
frame.setSize(300,200);
frame.setLayout(new GridLayout(3,4));
JButton b1=new JButton("1");
JButton b2=new JButton("2");
JButton b3=new JButton("3");
JButton b4=new JButton("4");
JButton b5=new JButton("5");
JButton b6=new JButton("6");
JButton b7=new JButton("7");
JButton b8=new JButton("8");
JButton b9=new JButton("9");
JButton b10=new JButton("10");
JButton b11=new JButton("11");
JButton b12=new JButton("12");
b1.addActionListener(lambdaExpression -> {
b2.setText("1");
b3.setText("1");
b4.setText("1");
b5.setText("1");
b6.setText("1");
b7.setText("1");
b8.setText("1");
b9.setText("1");
b10.setText("1");
b11.setText("1");
b12.setText("1");
});
b2.addActionListener(lambdaExpression -> {
b1.setText("1");
b3.setText("1");
b4.setText("1");
b5.setText("1");
b6.setText("1");
b7.setText("1");
b8.setText("1");
b9.setText("1");
b10.setText("1");
b11.setText("1");
b12.setText("1");
});
b3.addActionListener(lambdaExpression -> {
b1.setText("1");
b2.setText("1");
b4.setText("1");
b5.setText("1");
b6.setText("1");
b7.setText("1");
b8.setText("1");
b9.setText("1");
b10.setText("1");
b11.setText("1");
b12.setText("1");
});
.
.
.
frame.add(b1);
frame.add(b2);
frame.add(b3);
.
.
.
frame.pack();
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
我的问题是 - 有没有比将相同的行复制 12 次更快的方法?我在 Java 的编程方面相当陌生,所以任何见解都会有所帮助,谢谢!
将按钮放在数组中会有很大帮助
final JButton[] buttons = new JButton[12];
final ActionListener myListener = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
for (int i = 0; i < buttons.length; i++) {
if (buttons[i] != ae.getSource()) {
buttons[i].setText("1");
}
}
}
}
for (int i = 0; i < 12; i++) {
buttons[i] = new JButton();
buttons[i].setName("Button " + (i + 1));
buttons[i].addActionListener(myListener);
}
有时在这种情况下使用一种方法会有所帮助。特别是如果要用在别处。
for (int i = 1; i <= 12; i++) {
frame.add(createButton(i+"", "1"));
}
public static JButton createButton(String name, String init) {
JButton b = new JButton(name);
b.addActionListener(ae->b.setText(init));
return b;
}
可以添加或更正其他参数,但它给了你想法。如果需要,您还可以将 lambda 表达式传递给该方法。