我的ActionListener出现了技术问题。您看,我有一个按钮,它有几个可能的操作,这取决于之前单击的是哪个MenuItem。所以我创建了一个带有ActionEvent e的ActionListener。"e“应该验证3个条件中的一个(因为我有3个MenuItems -添加、删除和修改),并且根据选择的是哪一个,发生的操作彼此不同。
问题是这两个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:在测试散列方法之后,我意外地发现了一个奇怪的bug。首先,当我点击"Add“MenuItem,然后点击"Validate”按钮,没有任何反应。但是,如果我单击“验证”按钮,然后单击"Add MenuItem,the code works...我将尝试不同的条件“。
发布于 2018-12-24 23:22:39
我有一个按钮,它有几个可能的操作,这取决于之前单击的是哪个MenuItem。
响应按钮单击而触发的ActionEvent的源是被单击的按钮。您不能使用它来查询用户以前与之交互的控件。至少,不是直接的。
您的GUI中的控制流对我来说并不完全清楚,但您的替代方案有几个类别:
ActionListener中的哪一个,以便所调用的监听程序可以驱动效果的选择。前两种方法中的任何一种都比最后一种好得多,我提供这两种方法主要是为了完整性。
发布于 2018-12-24 23:28:07
这是一个非常令人困惑的问题。
我首先要说的是,使用getSource通常不是一个好主意。它将该操作耦合到组件--这正是问题侦听器被引入来摆脱的原因。这就像回到JDK 1.00,没有人想要那样,只是现在我们增加了额外的复杂性。此外,Swing倾向于使用复合组件(这是复合设计模式)。
让我们来看看你的代码。
private void buttonValidateActionPerformed(java.awt.event.ActionEvent事件){
// TODO add your handling code here: ActionListener l = (ActionEvent e) -> {这是怎么回事。真正的听众请起立。放入一些printfs (或使用调试器)以确保控制流符合预期。
if(e.getSource()==menuItemAdd)
{
System.out.println("eureka!");
buttonResearch.setEnabled(false);
if (evt.getSource()== buttonValidate)我猜你也在某个地方写过。
buttonValidate = menuItemAdd;
检查一下你的监听器是否一切都设置正确是值得的。在顶部尝试几个printfs。
System.err.println("e.getSource(): "+System.identityHashCode(e.getSource());
System.err.println("buttonValidate: "+System.identityHashCode(buttonValidate));
System.err.println("menuItemAdd: "+System.identityHashCode(menuItemAdd));
System.err.println("itemDelete: "+System.identityHashCode(itemDelete));
System.err.println("itemModify: "+System.identityHashCode(itemModify));如果你在某个地方搞砸了一些赋值,这应该会显示为意想不到的对象哈希码。
我建议后退代码,并为每个操作添加一个操作侦听器。您不应该到处都需要这些if语句。在每个监听器中,如果需要的话,它们可以检查状态。
https://stackoverflow.com/questions/53914940
复制相似问题