Я пытаюсь синхронизировать всплывающие окна двух полей со списком - назовите их comboBox и mirrorComboBox.
Я хочу, чтобы всплывающее окно mirrorComboBox отображалось, когда всплывающее окно comboBox становится видимым.
Я попытался реализовать это поведение, добавив PopupMenuListener в comboBox и вызвав mirrorComboBox.setPopupVisible (true), когда происходит событие popupMenuWillBecomeVisible. Он работает нормально, но, к сожалению, вызывает еще одну проблему - всплывающее окно comboBox никогда не будет скрыто! Событие: метод popupMenuWillBecomeInvisible никогда не вызывается после того, как всплывающее окно однажды установлено видимым.
Как синхронизировать видимость всплывающих окон двух полей со списком?
Вот моя реализация:
import java.awt.FlowLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
public class MirrorPopupsMainFrame extends JFrame implements PopupMenuListener {
public static void main(String[] args) {
new MirrorPopupsMainFrame().setVisible(true);
}
JComboBox comboBox;
JComboBox mirrorComboBox;
public MirrorPopupsMainFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
buildUi();
}
protected void buildUi() {
String[] items = new String[]{"item1", "item2", "item3"};
comboBox = new JComboBox(items);
comboBox.addPopupMenuListener(this);
mirrorComboBox = new JComboBox(items);
setLayout(new FlowLayout());
add(comboBox);
add(mirrorComboBox);
setBounds(0, 0, 300, 200);
}
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
// Not calling the following line will cause
// comboBox's popup to hide correctly.
mirrorComboBox.setPopupVisible(true);
}
@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
mirrorComboBox.setPopupVisible(false);
}
@Override
public void popupMenuCanceled(PopupMenuEvent e) {}
}