Можно ли обнаружить двойной щелчок на элементе JComboBox? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть вопрос к школе, в котором говорится, что я должен изменить цвет фона моего JFrame, когда «элемент в JComboBox дважды щелкнул».

Возможно ли это с помощью ItemListenerили ActionListener?Или мне нужно реализовать, используя 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 голосов
/ 21 февраля 2019

Не знаю, возможно ли это, потому что всплывающее окно с флажком закрывается после одного щелчка мыши.

Однако, если это возможно, я бы посоветовал вам добавить в список 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(...);
}
...