可以检测双击 JComboBox 项目吗?

Possible to detect double click on a JComboBox item?

我有一个问题想问学校,我应该在 "an item in the JComboBox is double clicked" 时更改 JFrame 的背景颜色。

这可以使用 ItemListenerActionListener 吗?或者我需要使用 MouseListener?

来实现

代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;

public class ColorSelection extends JFrame {

    String[] colorNames = {
            "Black", "Blue"
    };
    Color colors[] = {
            Color.BLACK, Color.BLUE
    };
    JComboBox coloursComboBox = new JComboBox(colorNames);
    ColorItemListener colorItemListener = new ColorItemListener(this);

    public ColorSelection() {
        super("My color combobox");

        coloursComboBox.addItemListener(colorItemListener);

        add(coloursComboBox, BorderLayout.NORTH);

        setSize(600, 600);
        setVisible(true);
    }

    public class ColorItemListener implements ItemListener {

        ColorSelection colorSelection;

        public ColorItemListener(ColorSelection colorSelection) {
            this.colorSelection = colorSelection;
        }

        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                if (e.getItem().toString().equals("Black")) {
                    colorSelection.getContentPane().setBackground(Color.BLACK);
                } else {
                    colorSelection.getContentPane().setBackground(Color.BLUE);
                }
            }
        }
    }

    public static void main(String[] args) {
        new ColorSelection();
    }
}

不知道可不可以,因为鼠标单击后checkbox的弹窗就关闭了

但是,如果可能的话,我建议您需要将 MouseListener 添加到已添加到组合框弹出窗口中的 JList。

创建组合框后,您可以使用如下代码将 MouseListener 添加到 JList:

JComboBox comboBox = new JComboBox(...);
Object child = comboBox.getAccessibleContext().getAccessibleChild(0);

if (child instanceof BasicComboPopup)
{
    BasicComboPopup popup = (BasicComboPopup)child;
    JList list = popup.getList();
    list.addMouseListener(...);
}