【发布时间】:2018-12-24 14:56:43
【问题描述】:
我的 ActionListener 出现技术问题。你看,我有一个按钮,它有多个可能的操作,这取决于之前单击了哪个 MenuItem。所以我创建了一个带有 ActionEvent e 的 ActionListener。 “e”应该验证 3 个条件之一(因为我有 3 个菜单项 - 添加、删除和修改),并且根据选择的一个,发生的操作彼此不同。
问题是 e.getSource() 条件都没有得到验证(即使我已经检查了好几次。我已经被这个问题困住了 3 天了,所以老实说有点帮助会很受欢迎!
同时,祝你圣诞快乐,新年快乐!
private void buttonValidateActionPerformed(java.awt.event.ActionEvent evt){
// TODO add your handling code here:
ActionListener l = (ActionEvent e) -> {
if(e.getSource()==menuItemAdd)
{
System.out.println("eureka!");
buttonResearch.setEnabled(false);
if (evt.getSource()== buttonValidate)
{
DataTransac dt = new DataTransac();
dt.ajouterProgrammeurs("...");
}
}
if(e.getSource()==itemDelete)
{
if(evt.getSource()== buttonValidate)
{
DataTransac dt = new DataTransac();
dt.deleteProgrammers("...");
}
}
if(e.getSource()==itemModify)
{
if(evt.getSource()==buttonValidate)
{
DataTransac dt = new DataTransac();
dt.modifyProgrammeurs("...");
}
}
};
menuItemAdd.addActionListener(l);
itemDelete.addActionListener(l);
itemModify.addActionListener(l);
/*
*/
}
编辑:我尝试了“.equals()”方法,但效果不佳。
ActionListener l = (ActionEvent e) -> {
if(e.equals(menuItemAjouter))
{
System.out.println("eureka!");
buttonResearch.setEnabled(false);
if (evt.getSource()== buttonValidate)
{
DataTransac dt = new DataTransac();
dt.addProgrammers("...");
}
...
编辑 2:在测试哈希方法后,我偶然发现了一个奇怪的错误。起初,当我单击“添加”菜单项然后单击“验证”按钮时,什么也没有发生。但是,如果我单击“验证”按钮,然后单击“添加菜单项,代码有效……我将尝试不同的条件。
【问题讨论】:
-
不要在另一个 ActionListener 中添加一个 ActionListener。为您的每个菜单项添加一个 ActionListener恰好一次,而不是每次用户按下按钮时。让该侦听器将 ActionEvent 保存在私有字段中,以便按钮的单独 ActionListener 可以使用它。
-
@BrentR 不,不起作用 - 但无论如何感谢您的尝试!
-
请编辑您的问题并展示您尝试过的其他内容。 不要替换您当前的代码, 因为这会导致当前的答案看起来毫无意义。将新代码添加到问题的末尾。
-
@VGR 当您谈论在另一个 ActionListener 中添加一个 ActionListener 时,我不明白。 ActionListeners 添加在最后一个括号和分号之后。你能改一下你刚才说的话吗?
-
buttonValidateActionPerformed(ActionEvent evt)显然是从按钮的 ActionListener 调用的。当用户按下您的按钮时,将调用该方法。在该方法中,您将向每个菜单项添加一个全新的 ActionListener,这是您不应该做的事情。就像现在的代码一样,用户第一次按下按钮时,菜单项没有自己的 ActionListener。用户第二次按下按钮时,每个菜单项都有一个 ActionListener。下一次,每个菜单项将有两个 ActionListener。然后是三个,然后是四个,依此类推。
标签: java swing jbutton jmenuitem