首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回忆JButton值

回忆JButton值
EN

Stack Overflow用户
提问于 2015-08-26 01:16:30
回答 1查看 351关注 0票数 0

我想回忆一下单击JButton的值,即当用户单击JButton时,JButton的值(这是一个字母)将被写入JLabel。用户将单击多个按钮,因此需要存储和打印多个值。最后,用户将单击一个按钮,保存所有接收到的JLabel值的JButton将被存储(显然使用数组)。

下面是我的JButton在代码中的样子:

代码语言:javascript
复制
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();是对另一个类的引用,其中的“字母”是一个包含16个值的数组。我是否需要将每个JButton分别添加到boggleGrid中,这样就可以回忆起它们的个人名称以达到上述目标,还是它们有单独的名称而我不知道?(我使用了某个人给我的for循环,所以我不确定每个JButton是否有单独的名称)

谢谢,如果这是初级的话

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-26 01:52:52

看下面的代码,你会得到一些想法.

每次使用StringBuilder.append(JButton.getText().toString()).单击按钮时,我都使用StringBuilder来存储按钮的值这是在actionPerformed的JButtons方法中完成的。

最后,在Done按钮actionPerformed方法中,我将字符串生成器保存在数组中的文本进行了存储。

我知道你用了16个JButton.我只是为了简单用3.

代码语言:javascript
复制
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的类,而不是为每个JButton设置一个类。

在actionPerformed方法中使用“公共空actionPerformed(ActionEvent ev)”

您必须使用ev.getActionCommand(),这将返回导致事件的JButton的文本值。然后,您可以将其附加到StringBuilder中。

因此类似于这样的东西:私有ArrayList listForEdit =新的ArrayList<>();StringBuilder sbEdit =新的StringBuilder();

代码语言:javascript
复制
   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());
                    }
              }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32216513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档