Как синхронизировать видимость всплывающих окон двух JComboBox (comboBox и mirrorComboBox) - PullRequest
0 голосов
/ 23 ноября 2011

Я пытаюсь синхронизировать всплывающие окна двух полей со списком - назовите их 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) {}

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