Changing ActionListener to append StringBuilder



在大大缩短了代码的两条语句中,我需要添加一条语句,将JButton的文本添加到StringBuilder中。ActionListener语句的存在是为了在单击时禁用JButtons(美观),但如果可能的话,我还想包括在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)将上述ActionListener添加到每个由for循环产生的按钮上。然而,

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

是我认为可以正确地附加StringBuilder"currentWord"与点击按钮持有的任何值(因此"((JButton)event.getSource())")。每次都没有错误,但我在主类中编写了单独的代码行,以测试当单击任何按钮时是否有任何更改。没有。

我需要做什么才能正确地将单击的JButton的值添加到currentWord?

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

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

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

而不是

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

最新更新