Java Swing и JComboBox События - PullRequest
1 голос
/ 16 марта 2011

У меня есть JComboBox с несколькими значениями в нем.Мне нужно иметь возможность определять, когда пользователь нажимает JComboBox, но не изменяет текущий выбранный элемент.

Ни itemStateChanged, ни actionPerformed не запускаются, когда это происходит.

Чтособытие, которое я должен использовать?

Ответы [ 4 ]

2 голосов
/ 16 марта 2011

Как насчет записи состояния поля со списком при нажатии кнопки мыши и сравнения его со значением, которое имеет окно при отпускании кнопки мыши?

  • прикрепить a MouseListener к JComboBox
  • переопределить метод mousePressed() для записи состояния блока во временную переменную
  • переопределить метод mouseReleased() для сравнения значения поля со значением временной переменной

На данный момент это простая проверка на равенство.

1 голос
/ 16 марта 2011

Что если пользователь использует клавиатуру, чтобы открыть всплывающее окно, а затем использует клавишу выхода, чтобы закрыть всплывающее окно?

Я бы использовал PopupMenuListener. Это должно обрабатывать действия мыши и клавиатуры. Концепция будет такой же, как и другие предложения. Когда появится всплывающее окно, вы сохраните выбранный индекс. Когда он закрывается, вы сравниваете выбранный индекс, чтобы увидеть, что он изменился.

1 голос
/ 16 марта 2011

Добавьте MouseListener к JComboBox, используя метод addMouseListener. Вы захотите расширить MouseAdapter и переопределить только метод mouseClicked.

0 голосов
/ 20 ноября 2011

Я специально искал щелчок правой кнопкой мыши по элементам, так что это немного другая проблема.Но решение для меня было

  1. Подкласс JComboBox с заменой getCellRenderer() с подклассом DefaultListCellRenderer.

  2. В ячейкеперехватчик рендерера getListCellRendererComponent(), который имеет параметры boolean isSelected, boolean cellHasFocus и может использоваться для отслеживания событий мыши и выполнения list.setToolTipText().

Я уверен, что не финализменение выбора попадет туда, где его можно перехватить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...