Как создать Combobox с множественным выбором? - PullRequest
3 голосов
/ 03 апреля 2012

Мне нужно создать комбинированное окно с множественным выбором, как этого добиться?

Ответы [ 2 ]

6 голосов
/ 10 февраля 2014

Я знаю, что вопрос довольно старый, но для тех, кто все еще ищет решение этой проблемы, попробуйте следующий код:

public class ComboSelections {

public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, UnsupportedLookAndFeelException {

UIManager.setLookAndFeel((LookAndFeel) Class.forName("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel").newInstance());

final JPopupMenu menu = new JPopupMenu();
JMenuItem one = new JCheckBoxMenuItem("One");
JMenuItem two = new JCheckBoxMenuItem("Two");
JMenuItem three = new JCheckBoxMenuItem("Three");
JMenuItem four = new JCheckBoxMenuItem("Four");
menu.add(one);
menu.add(two);
menu.add(three);
menu.add(four);


final JButton button = new JButton("Click me");
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        if (!menu.isVisible()) {
            Point p = button.getLocationOnScreen();
            menu.setInvoker(button);
            menu.setLocation((int) p.getX(),
                    (int) p.getY() + button.getHeight());
            menu.setVisible(true);
        } else {
            menu.setVisible(false);
        }

    }
});

one.addActionListener(new OpenAction(menu, button));
two.addActionListener(new OpenAction(menu, button));
three.addActionListener(new OpenAction(menu, button));
four.addActionListener(new OpenAction(menu, button));

JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.add(button);
frame.getContentPane().add(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

private static class OpenAction implements ActionListener {

    private JPopupMenu menu;
    private JButton button;

    private OpenAction(JPopupMenu menu, JButton button) {
        this.menu = menu;
        this.button = button;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        menu.show(button, 0, button.getHeight());
    }
}
}
2 голосов
/ 03 апреля 2012

Существует несколько основных проблем с созданием всплывающего содержимого настраиваемого комбинированного списка (например, списка с множественным выбором):
1. Стандартный пользовательский интерфейс предлагает использовать JList в качестве содержимого, чтобы изменить его поведение.изменить весь ComboBoxUI
2. Вы не можете просто изменить список комбинированного списка по умолчанию на множественный выбор из-за того, что только одно значение становится «выделенным» в конце, а в списке есть прослушиватель мыши при выделении при опрокидывании по умолчанию, что сделает вас неспособным выбрать более одного элемента

Так что я бы рекомендовал вам использовать простой JList вместо combobox или изучить использование некоторых расширенных библиотек компонентов, таких как JideSoft - они имеютэтот компонент и многое другое, что вы не сможете быстро создать с помощью функций Swing.

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