【问题标题】:How to add listener event to JComboBox in Java如何在 Java 中将侦听器事件添加到 JComboBox
【发布时间】:2017-06-29 23:38:26
【问题描述】:

我需要知道如何有效地将鼠标事件添加到 JComboBox 或任何其他有效的方法。我在这里和不同的网站上找到了一些可能的解决方案,但我无法让它工作。似乎 mouseEvent 不适合在 JComboBox 上使用,因为它是一个复合组件。我找到了复合组件的可能解决方案,但也不起作用。所以下面是我使用文本字段时的代码。关于我应该使用哪种方法的任何想法?谢谢

    private void updateReviewers() {
        jComboBox_reviewer.addMouseListener(new MouseListener() {

        @Override
        public void mouseClicked(MouseEvent e) {
            System.out.println("clicked");
        }

        @Override
        public void mousePressed(MouseEvent e) {
            System.out.println("pressed");
        }

        @Override
        public void mouseReleased(MouseEvent e) {
            System.out.println("released");
        }

        @Override
        public void mouseEntered(MouseEvent e) {
            System.out.println("entered");
        }

        @Override
        public void mouseExited(MouseEvent e) {
            System.out.println("exited");
        }

    }
    );

}

【问题讨论】:

    标签: java swing listener jcombobox jcommander


    【解决方案1】:

    您应该能够在 JComboBox 本身上使用addActionListener(ActionEvent e)。一旦选择了任何项目,您就可以在动作侦听器中执行任何类型的验证。

    jcomboBox.addActionListener(new ActionListener() {
    
            public void actionPerformed(ActionEvent e)
            {
                JComboBox comboBox = (JComboBox) event.getSource();
                Object o = comboBox.getSelectedItem();
                //Any extra code
            }
        });  
    

    当然,Object 可以转换为您想要的对象类型。

    Oracle Documentation 用于使用 JComboBox 处理事件

    【讨论】:

    • 感谢@Juxhin,有没有办法在单击组合框时添加一个事件,甚至在从列表中选择一个项目之前?
    • 是的,提供的代码可以做到这一点。老实说,我不确定在调用getSelectedItemObject 会返回什么(因为您只是单击了组合框而其中没有任何项目)但是我的直觉告诉我它将返回第一个对象默认。但是,从您所说的来看,我认为您不应该对此有任何疑问。
    • 对不起@Juxhin,但上面的代码仅在我从列表中选择一个元素时才有效。不知道我是否错过了在这里理解的东西,但它对我不起作用。
    • 刚刚测试了代码,它似乎对我有用。您能否准确解释您要达到的目标,因为我相信我误解了某些东西。谢谢
    • 当用户单击它时,我正在尝试更新组合框的项目。出于测试目的,我仅使用 System.out.print 来检查单击组合时它是否会打印。但是,只有当我从列表中选择一个项目时它才会打印。请参阅下面的代码。谢谢你的帮助。 jComboBox_reviewer.addActionListener((ActionEvent e) -> { JComboBox comboBox = (JComboBox) e.getSource(); Object o = comboBox.getSelectedItem(); System.out.println("tets"); });
    【解决方案2】:

    这是一个创建 JComboBox 并创建一个字符串数组并使用这些数组项并创建 ComboBox 的列表项的程序。然后将每个项目与图像链接。然后我们启动 Action Listener 并为每个列表项提供一个操作。 注意,图片必须保存在项目的源文件夹和类文件夹中。

    package JComboBox;
    
        import java.awt.*;
    
        import java.awt.event.*;
    
        import javax.swing.*;
    
        /*<applet code="JComboBoxDemo" width=200 height=120></applet>
         */
    
        public class JComboBoxDemo extends JApplet
        {
    
            JLabel jlab;
            ImageIcon hourglass, digital, analog, stopwatch;
            JComboBox <String> jcb;
            String timepieces[] = {"Digital", "Analog", "Hourglass",  "Stopwatch"};
            String s;
    
            public void init()
            {
                try {
                    SwingUtilities.invokeAndWait(new Runnable() {
    
                        public void run() {
    
                            makeGUI();
                        }
                    });
                }
    
                catch(Exception exc)
                {
                    System.out.println("Program can't run because of "+exc);
                }
            }
    
            private void makeGUI()
            {
                setLayout(new FlowLayout());
                jcb = new JComboBox<String>(timepieces);
                add(jcb);
    
                jcb.addActionListener(new ActionListener() {
    
                    public void actionPerformed(ActionEvent ae) {
    
                        s = (String) jcb.getSelectedItem();
                        jlab.setIcon(new ImageIcon(s + ".jpg"));
                    }
                });
    
                    jlab = new JLabel(new ImageIcon());
                    add(jlab);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2021-03-10
      • 2014-06-19
      • 1970-01-01
      • 2021-04-17
      • 2022-07-21
      相关资源
      最近更新 更多