我正在为学校创建一个测验。这些问题有几个按钮,当按下这些按钮时,会显示新问题,并为4个答案的按钮创建4个不同的ActionListeners
。
现在我需要在按下一个按钮后删除4 ActionListeners
。
我可以从按钮本身中删除ActionListener
,但我也要删除其他3 ActionListeners
。
每个新的ActionListener
都是这样的:
btAnswer1.addActionListener(new java.awt.event.ActionListener()
{
@Override
public void actionPerformed(java.awt.event.ActionEvent evt)
{
lResult.setForeground(Color.red);
lResult.setText("Wrong Answer :(");
// The team is changed.
if (aktTeam == 1)
{
aktTeam = 2;
lAktTeam.setText("Team 2");
}
else
{
aktTeam = 1;
lAktTeam.setText("Team 1");
}
// Here, this ActionListener is removed. But the others should
// be removed too.
btAntwort1.removeActionListener(this);
}
});
我希望有人可以提供帮助。 :)
编辑:由davidxxx解决。谢谢!
答案 0 :(得分:3)
1)在你的例子中,你没有从你添加了听众的那个btn中移除btAnswer1
:
您将其添加到btAnswer1.addActionListener(new java.awt.event.ActionListener()...
:
btAntwort1
但是您将其从btAntwort1.removeActionListener(this);
:
ActionListener
所以,它应该不起作用。
现在我需要在一个按钮后删除4个ActionListener 按压。
2)如果删除与Button关联的所有for( ActionListener listener : btAntwort1.getActionListeners() ) {
btAntwort1.removeActionListener(listener);
}
在我们的用例中有效,您可以这样做:
ActionListener
否则,如果您不想删除与该按钮关联的所有ActionListener
,则不应内联匿名 ActionListener actionListenerOne = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
...
}
};
ActionListener actionListenerTwo = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
...
}
};
个实例,以便在需要时保留对它们的引用从按钮中删除它们。
例如,这样做:
ActionListener
现在,您可以在可能添加到按钮的JButton button = ...;
button.addActionListener(actionListenerOne);
button.addActionListener(actionListenerTwo);
个实例上找到两个引用。
所以你可以这样做:
button.removeActionListener(actionListenerOne);
button.removeActionListener(actionListenerTwo);
以后:
modeles[i] = line;