更改 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
方法。这不是您想要的,而是使用 JButton
的 text
属性 或 ActionEvent
的 actionCommand
属性,例如...
theModel.currentWord.append(((JButton)event.getSource()).getText());
或
theModel.currentWord.append(event.getActionCommand());
改为
除非您自己指定 JButton
的 actionCommand
,否则它将使用按钮文本作为 actionCommand
在大大缩短了我的代码的两个语句中,我需要添加一个语句,将 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
方法。这不是您想要的,而是使用 JButton
的 text
属性 或 ActionEvent
的 actionCommand
属性,例如...
theModel.currentWord.append(((JButton)event.getSource()).getText());
或
theModel.currentWord.append(event.getActionCommand());
改为
除非您自己指定 JButton
的 actionCommand
,否则它将使用按钮文本作为 actionCommand