如何使用多选创建Combobox?

时间:2012-04-03 11:06:40

标签: java swing jcombobox

我需要创建一个具有多选的组合框,如何实现呢?

2 个答案:

答案 0 :(得分:6)

我知道,问题相当陈旧,但对于仍在寻找此问题解决方案的人,请尝试以下代码:

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());
    }
}
}

答案 1 :(得分:2)

创建自定义组合框弹出内容有一些基本问题(如带有多选的列表):
1. 默认用户界面建议将JList用作内容,以便更改您必须更改整个ComboBoxUI的行为 2。您不能简单地将默认组合框列表更改为多选项,因为在结尾只有一个值被“选中”而列表具有默认的翻转选择鼠标侦听器,这将使您无法选择多个元素

所以我建议您使用简单的JList而不是组合框,或者使用一些扩展的组件库,例如JideSoft - 他们有这个组件以及更多你无法使用Swing快速创建的组件特征