可能检测到双击JComboBox项目吗?

时间:2019-02-21 20:40:53

标签: java swing listener jcombobox

我上学时有个问题,指出“双击JFrame中的某个项目时,应该更改JComboBox的背景颜色。

是否可以使用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();
    }
}

1 个答案:

答案 0 :(得分:2)

不知道是否可能,因为单击鼠标后复选框的弹出窗口就关闭了。

但是,如果可能的话,我建议您需要将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(...);
}