2012-04-03 13 views
3

私はマルチセレクションのコンボボックスを作成する必要がありますか?複数選択によるコンボボックスの作成方法

+1

は、あなたの答えです:http://stackoverflow.com/ a/2860376/32090 –

+1

これには[JList](http://docs.oracle.com/javase/6/docs/api/javax/swing/JList.html)を使用することをお勧めします。 – flash

+1

@Andrew Thompson:良いアドバイス:) – manhnt

答えて

2

(複数選択して、リストのような)カスタムコンボボックスのポップアップコンテンツを作成すると、いくつかの基本的な問題があります。
1.デフォルトUIはそうあなたが全体を変更する必要がありますその動作を変更するコンテンツとしてJListの使用を示唆していますComboBoxUI
2.デフォルトでコンボボックスリストを複数選択に変更することはできません。最後に1つの値だけが選択され、リストにはデフォルトのロールオーバー選択マウスリスナーがあり、これ以上選択できません1つの要素より多く

私はあなたに私達にお勧めしたいコンボボックスの代わりに単純なJListを使用するか、JideSoftのような拡張コンポーネントライブラリを使用してみてください。これらのコンポーネントは、Swing機能を使用してすばやく作成することができません。

+0

良い点、ありがとう。 – manhnt

+0

ちょうど私はすでにコンボボックスのポップアップをツリー状に変えようとしましたが、失敗しました。その試みにはほぼ一日かかりました。ですから、JList ORをオプションとして使用することをお勧めします.JButtonは、あなたが好きなコンポーネント/エディタを含むポップアップを持っています。 –

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

問題の素晴らしい解決策) – Denis

関連する問題