2

jComboBox要素リストをソート済みリストにソートする方法。

JComboBox box=new JComboBox();
box.addItem("abc");
box.addItem("zzz");
box.addItem("ccc");
add(box);

多くの jComboBox コンポーネントを使用しましたが、機能していません。このリストを昇順に並べ替えるにはどうすればよいですか?

4

3 に答える 3

12

をご覧いただけますSortedComboBoxModel

このモデルは DefaultComboBoxModel を拡張し、次の 2 つの追加機能が組み込まれています。

  • モデルの作成時に、提供されたデータは前にソートされます
  • モデルに新しいアイテムを追加するときにデータがモデルに追加され、アイテムはソート順を維持するために挿入されます

デフォルトのソート順は、モデルに追加された項目の自然なソート順になります。ただし、カスタム Comparator をコンストラクターのパラメーターとして指定することで、これを制御できます。

これを使用する方法の例を次に示します(そこから取得):

String[] items = { "one", "two", "three" };
SortedComboBoxModel<String> model = new SortedComboBoxModel<String>(items);
JComboBox<String> comboBox = new JComboBox<String>(model);
comboBox.addItem("four");
comboBox.addItem("five");
comboBox.setSelectedItem("one");

ソースコード

于 2013-06-12T08:56:12.407 に答える
2

addItemのデフォルトの動作は、ニーズに合わせてオーバーライドできます。

実行可能な例

public class SortedCombobox {

    @SuppressWarnings("serial")
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame("Overriden JCombobox");
                frame.getContentPane().setLayout(new BorderLayout());
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JComboBox box = new JComboBox(){
                    @Override public void addItem(Object obj){
                        int count = getItemCount();
                        String toAdd = (String) obj;

                        List<String> items = new ArrayList<String>();
                        for(int i = 0; i < count; i++){
                            items.add((String)getItemAt(i));
                        }

                        if(items.size() == 0){
                            super.addItem(toAdd);
                            return;
                        }else{
                            if(toAdd.compareTo(items.get(0)) <= 0){
                                insertItemAt(toAdd, 0);
                            }else{
                                int lastIndexOfHigherNum = 0;
                                for(int i = 0; i < count; i++){
                                    if(toAdd.compareTo(items.get(i)) > 0){
                                        lastIndexOfHigherNum = i;
                                    }
                                }
                                insertItemAt(toAdd, lastIndexOfHigherNum+1);
                            }
                        }
                    }
                };

                box.addItem("zzz");
                box.addItem("hh");
                box.addItem("aa");
                box.addItem("yy");
                box.addItem("uu");
                box.addItem("bb");
                box.addItem("rr");
                box.addItem("aa");
                box.setSelectedIndex(0);

                frame.getContentPane().add(box);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
于 2013-06-13T01:32:51.377 に答える