调用 JButton 值
Recalling JButton value
我希望在单击时调用 JButton 的值,即当用户单击 JButton 时,该 JButton 的值(单个字母)将写入 JLabel。用户将单击多个按钮,因此需要存储和打印多个值。最后,用户将单击一个按钮,保存所有收到的 JButton 值的 JLabel 将被存储(显然使用数组)。
这是我的 JButton 在代码中的样子:
theModel.randomLetters();
for(int i=0;i<16;i++){
JButton dice = new JButton(theModel.letters.get(i));
dice.addActionListener(disableButtonListener);
boggleGrid.add(dice);
}
theModel.randomLetters();是对另一个 class 的引用,其中 "letters" 是一个包含 16 个值的数组。我是否需要将每个 JButton 单独添加到 boggleGrid 以便可以调用它们的单独名称以实现上述目标,或者它们是否有单独的名称但我不知道? (我使用了别人给我的 for 循环,所以我不确定每个 JButton 是否有单独的名称)
谢谢,抱歉,如果这是初级的
阅读下面的代码,你会得到一些想法...
我使用 StringBuilder 来存储每次使用 StringBuilder.append(JButton.getText().toString()) 单击按钮时的值。这是在 JButton 的 actionPerformed 方法中完成的。
最后在完成按钮 actionPerformed 方法中,我将字符串生成器保存的文本存储在一个数组中。
P.S。我知道您使用了 16 个 JButton,为了简单起见,我只使用了 3 个...
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.ArrayList;
public class GUI extends JFrame{
ArrayList<String> numbers = new ArrayList<>();
StringBuilder sb = new StringBuilder();
JButton button1;
JButton button2;
JButton button3;
JButton doneButton;
JPanel row1 = new JPanel();
JPanel textLabelRow = new JPanel();
JLabel label = new JLabel();
JPanel row3 = new JPanel();
public void create(){
setTitle("S-O");
setSize(500,200);
setLayout(new GridLayout(3,1,10,10));
button1 = new JButton("1");
button2 = new JButton("2");
button3 = new JButton("3");
doneButton = new JButton("Done");
row1.add(button1);
row1.add(button2);
row1.add(button3);
button1.addActionListener(new Button1Listener());
button2.addActionListener(new Button2Listener());
button3.addActionListener(new Button3Listener());
doneButton.addActionListener(new doneButtonListener());
textLabelRow.add(label);
row3.add(doneButton);
add(row1);
add(textLabelRow);
add(row3);
setVisible(true);
}
private class Button1Listener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
sb.append(button1.getText().toString());
}
}
private class Button2Listener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
sb.append(button2.getText().toString());
}
}
private class Button3Listener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
sb.append(button3.getText().toString());
}
}
private class doneButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
label.setText(sb.toString());
numbers.add(sb.toString());
sb = new StringBuilder();
}
}
public static void main(String[] args){
GUI start = new GUI();
start.create();
}
}
编辑:
您可以只使用一个实现 ActionListener 的 class,而不是为每个 JButton 使用一个。
在actionPerformed方法中使用"public void actionPerformed(ActionEvent ev)"
您必须 ev.getActionCommand(),这将 return 导致事件的 JButton 的文本值。然后您可以将其附加到 StringBuilder。
大致是这样的:
private ArrayList listForEdit = new ArrayList<>();
StringBuilder sbEdit = new StringBuilder();
class actionHandler implements ActionListener{
public void actionPerformed(ActionEvent ev){
if(ev.getActionCommand.equals("Done"))
listForEdit.add(sbEdit);
sbEdit = new StringBuilder();
}
else{
sbEdit.append(ev.getActionCommand());
}
}
我希望在单击时调用 JButton 的值,即当用户单击 JButton 时,该 JButton 的值(单个字母)将写入 JLabel。用户将单击多个按钮,因此需要存储和打印多个值。最后,用户将单击一个按钮,保存所有收到的 JButton 值的 JLabel 将被存储(显然使用数组)。
这是我的 JButton 在代码中的样子:
theModel.randomLetters();
for(int i=0;i<16;i++){
JButton dice = new JButton(theModel.letters.get(i));
dice.addActionListener(disableButtonListener);
boggleGrid.add(dice);
}
theModel.randomLetters();是对另一个 class 的引用,其中 "letters" 是一个包含 16 个值的数组。我是否需要将每个 JButton 单独添加到 boggleGrid 以便可以调用它们的单独名称以实现上述目标,或者它们是否有单独的名称但我不知道? (我使用了别人给我的 for 循环,所以我不确定每个 JButton 是否有单独的名称)
谢谢,抱歉,如果这是初级的
阅读下面的代码,你会得到一些想法...
我使用 StringBuilder 来存储每次使用 StringBuilder.append(JButton.getText().toString()) 单击按钮时的值。这是在 JButton 的 actionPerformed 方法中完成的。
最后在完成按钮 actionPerformed 方法中,我将字符串生成器保存的文本存储在一个数组中。
P.S。我知道您使用了 16 个 JButton,为了简单起见,我只使用了 3 个...
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.ArrayList;
public class GUI extends JFrame{
ArrayList<String> numbers = new ArrayList<>();
StringBuilder sb = new StringBuilder();
JButton button1;
JButton button2;
JButton button3;
JButton doneButton;
JPanel row1 = new JPanel();
JPanel textLabelRow = new JPanel();
JLabel label = new JLabel();
JPanel row3 = new JPanel();
public void create(){
setTitle("S-O");
setSize(500,200);
setLayout(new GridLayout(3,1,10,10));
button1 = new JButton("1");
button2 = new JButton("2");
button3 = new JButton("3");
doneButton = new JButton("Done");
row1.add(button1);
row1.add(button2);
row1.add(button3);
button1.addActionListener(new Button1Listener());
button2.addActionListener(new Button2Listener());
button3.addActionListener(new Button3Listener());
doneButton.addActionListener(new doneButtonListener());
textLabelRow.add(label);
row3.add(doneButton);
add(row1);
add(textLabelRow);
add(row3);
setVisible(true);
}
private class Button1Listener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
sb.append(button1.getText().toString());
}
}
private class Button2Listener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
sb.append(button2.getText().toString());
}
}
private class Button3Listener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
sb.append(button3.getText().toString());
}
}
private class doneButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
label.setText(sb.toString());
numbers.add(sb.toString());
sb = new StringBuilder();
}
}
public static void main(String[] args){
GUI start = new GUI();
start.create();
}
}
编辑:
您可以只使用一个实现 ActionListener 的 class,而不是为每个 JButton 使用一个。
在actionPerformed方法中使用"public void actionPerformed(ActionEvent ev)"
您必须 ev.getActionCommand(),这将 return 导致事件的 JButton 的文本值。然后您可以将其附加到 StringBuilder。
大致是这样的: private ArrayList listForEdit = new ArrayList<>(); StringBuilder sbEdit = new StringBuilder();
class actionHandler implements ActionListener{
public void actionPerformed(ActionEvent ev){
if(ev.getActionCommand.equals("Done"))
listForEdit.add(sbEdit);
sbEdit = new StringBuilder();
}
else{
sbEdit.append(ev.getActionCommand());
}
}