Java addActionListener,正在发生多个实例

问题描述

当我尝试对comboBox_0执行操作时,它将打印“红色”并将在comboBox_1上选择的项更改为“ apple”,但是它也会为comboBox_1生成操作事件,并且还将打印“蓝色”。

我该如何执行此操作,以便程序不会将更改comboBox_1项目视为生成操作事件。我不需要它来打印“蓝色”,只需要打印“红色”并更改为“苹果”即可。

java是否可以区分用户执行的操作和程序本身?

抱歉,我是该领域的新手,我无法检查他们讨论ActionEvent的消息源。

这是示例:

public void actionPerformed(ActionEvent e) 
{
    if(e.getSource()==comboBox_0)
    {
        System.out.println("red");
        comboBox_1.setSelectedItem("apple");
    }
    else if(e.getSource()==comboBox_1)
    {   
        System.out.println("blue");
    }
    else if(e.getSource()==comboBox_2)
    {
        System.out.println("green");
    }
}

解决方法

您正在发起一个事件,但是同时您不想使用它。在程序中输入标志。使用这个:

private boolean flag = false;
public void actionPerformed(ActionEvent e)
{
    if(e.getSource()==comboBox_0)
    {
        System.out.println("red");
        comboBox_1.setSelectedItem("apple");
        flag = true;
    }
    else if(e.getSource()==comboBox_1)
    {
        if(flag){
            flag = false;
            return;
        }
        System.out.println("blue");
    }
    else if(e.getSource()==comboBox_2)
    {
        System.out.println("green");
    }
}

不幸的是,无法区分事件源(软件或用户定义的)。但这不是必需的。如果存在这样的实现,则在任何情况下都将其简化为“标志”。您可以将boolean或Emun用作标志。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...