当前位置: 首页 > 知识库问答 >
问题:

无法在actionevent Buttonclicked内添加到arraylist

端木令
2023-03-14

问题:我无法将单击按钮的值添加到ArrayList中。

示例:如果我单击名为E的按钮,那么我希望将E添加到arraylist中,之后如果我单击按钮S,那么它应该添加相同的arraylist。但这并不是在ArrayList中添加任何东西。它只显示当前单击的按钮

public class WordFinder extends JFrame implements ActionListener {
    private JButton buttons[];
    ArrayList<String> LettersClicked = new ArrayList<String>();
    private JTextArea jta;
    private JLabel jLabel;
    public WordFinder(){

        int numberOfLetters = 64;
        buttons = new JButton[numberOfLetters];

        JFrame frame = new JFrame("wordfinder");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setBackground(Color.red);
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        JPanel topPanel = new JPanel();
        topPanel.setBorder(BorderFactory.createLineBorder(Color.GREEN));
        topPanel.setPreferredSize(new Dimension(600, 600));
        topPanel.setMaximumSize(new Dimension(600, 600));
        topPanel.setBackground(Color.red);

        JPanel bottomPanel = new JPanel();
        bottomPanel.setBorder(BorderFactory.createLineBorder(Color.yellow));
        bottomPanel.setPreferredSize(new Dimension(600, 300));
        bottomPanel.setMaximumSize(new Dimension(600, 300));
        bottomPanel.setBackground(Color.green);

        Font f3 = new Font(Font.DIALOG, Font.BOLD, 35);

        for (int i = 0;i<numberOfLetters;i++) {
            char letter = alphabet();
            buttons[i] = new JButton(String.valueOf(letter));
            buttons[i].setFont(f3);
           // buttons[i].setMinimumSize(new Dimension(40, 20));
            buttons[i].setPreferredSize(new Dimension(65, 65));
            buttons[i].setMargin(new Insets(0,0,0,0));
            buttons[i].setBackground(Color.white);
            buttons[i].setFocusPainted(false);
            buttons[i].addActionListener(this);
            topPanel.add(buttons[i]);
        }

        String buttValue = "";
        jLabel = new JLabel(""+buttValue);
        jLabel.setFont(f3);
        bottomPanel.add(jLabel);
        LettersClicked.add(jLabel.toString());

        for (int z = 0; z<LettersClicked.size(); z++){
            JLabel aa = new JLabel(""+LettersClicked.size());
            bottomPanel.add(aa);
        }

        mainPanel.add(topPanel);
        mainPanel.add(bottomPanel);

        frame.getContentPane().add(mainPanel);
        frame.setSize(1000,1000);
        frame.setMinimumSize(new Dimension(1000, 1000));
        frame.setVisible(true);
    }

    public char alphabet(){
        Random rnd = new Random();
        String alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        char letter = alphabets.charAt(rnd.nextInt(alphabets.length()));
        return letter;
    }

    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        JButton button = (JButton) actionEvent.getSource();
        jLabel.setText(button.getText());
        LettersClicked.add(button.getText());
    }
}

共有1个答案

柴俊捷
2023-03-14

我认为您对GUI上显示的JLabelArrayList的内容感到困惑。问题实际上在前者。

当前的实现将替换JLabel的文本,而不是为每个按下的按钮追加文本。

因此,在actionperformed()方法中,更改这一行

jLabel.setText(button.getText());
jLabel.setText(jLabel.getText() + button.getText());
 类似资料:
  • 我做了一个程序,利用3类,锦标赛,游戏和俱乐部。我在比赛和俱乐部中的方法都很好,但在冠军联赛的主要方法中,我遇到了问题。我有两个ArrayList,一个是with objects club,另一个是with objects game。在我的主要方法中,我使用while循环和切换用例创建了一个菜单,用户可以1-创建俱乐部,2-创建游戏,3-列出结果,4-注册结果。然而,我的所有案例都有相同的问题:不

  • 我想改变Jupyter内核的路径,将其设置为我在机器中使用的路径。 以下是安装在jupyter中的原始内核: 可用内核: python3/home/n/。local/share/jupyter/kernels/python3 python2/usr/local/share/jupyter/kernels/python2 然后我在我的机器中检查了python3的路径,如下所示: /usr/bin/p

  • 我已经使用Netbeans GUI构建器创建了我的GUI。JList被添加到scrollpane中,如果我硬编码了JList的内容,所有内容都显示得很好。 但是如果我尝试通过动态添加项,则不会出现任何内容。 我只想显示JList中的主题以供视觉使用,其余的都是在后台完成的。

  • 在我的android{}部分,我试图为五月免费和付费应用程序放置两种不同的构建类型。 这是我的控制台日志: 正在执行任务:[:Transport:CompileDebugJava] 按需配置是一个正在酝酿的特性。下载http://repo1.maven.org/maven2/com/android/tools/build/gradle/0.8.3/gradle-0.8.3.pom下载http://

  • 我试图向mongodb发送一个数组,但是返回一个空的,而且mongodb文档中从来没有出现biddingGroup字段。我看过堆栈文章,并看到了关于模式的建议。我试过了 应用程序JS 感谢任何帮助。

  • 但是,后来当我试图将整数添加到正确的“内部”数组列表中时,我无法将整数添加到ArrayList类型的位置中。我还得到一个索引超出界限的错误。 解决这个问题的方法是将整数强制转换为ArrayList类型,但这意味着我将在内部数组列表中添加一个数组列表,这不是我想要的。我想在正确的“内部”ArrayList中添加一个int。