更改 ActionListener 以附加 StringBuilder

Changing ActionListener to append StringBuilder

在大大缩短了我的代码的两个语句中,我需要添加一个语句,将 JButton 的文本添加到 StringBuilder。 ActionListener 语句的存在是为了在单击时禁用 JButton(一种漂亮的美学),但如果可能的话,我想包括在 ActionListener 中附加 StringBuilder 的能力。以下是这段代码的两部分。

theModel.randomLetters();

    ActionListener disableButton = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            if (!(event.getSource() instanceof JButton)) {
                return;
            }
            theModel.currentWord.append((JButton)event.getSource());
            ((JButton)event.getSource()).setEnabled(false);
        }
    };

    for (int i = 0; i < 16; i++) {
        JButton dice = new JButton(theModel.letters.get(i));
        dice.addActionListener(disableButton);
        boggleGrid.add(dice);
    }

.addActionListener(disableButton) 在for循环产生的每个按钮上添加上面的ActionListener。然而,

                theModel.currentWord.append((JButton)event.getSource());

是我认为可以正确附加 StringBuilder "currentWord" 的方法,无论单击的按钮具有什么值(因此是“((JButton)event.getSource())”)。每个人都没有错误,但我在我的主要 class 中编写了单独的代码行,以测试单击任何按钮时 StringBuilder 是否有任何更改。没有。

要将单击的 JButton 的值正确地添加到 currentWord,我需要在哪里做什么?

使用(JButton)event.getSource() 将导致StringBuilder 调用对象toString 方法。这不是您想要的,而是使用 JButtontext 属性 或 ActionEventactionCommand 属性,例如...

theModel.currentWord.append(((JButton)event.getSource()).getText());

theModel.currentWord.append(event.getActionCommand());

改为

除非您自己指定 JButtonactionCommand,否则它将使用按钮文本作为 actionCommand