4

我有这个具有可编辑属性的 JComboBox true。我想知道是否可以List<String>添加到 JComboBox 过滤中?

例如,我new String[] {"a", "a1", "b", "c", "a3"}添加了一个具有可编辑true属性的 JComboBox。当我a在 JComboBox 上输入时会返回一个new String[] {"a", "a1", "a3"}.

这可能吗?

提前致谢。

4

2 回答 2

4

最简单的方法是使用AutocComplete JComboBox / JTextField,然后JComboBox的弹出列表返回过滤的项目

于 2012-05-14T07:03:48.130 回答
0

这是您需要做的。创建一个 arrayList 或 List 并在那里添加所有项目。创建组合框并循环所有项目并将其添加到组合框然后创建一个过滤器方法。这不是一个完美的答案,但它会让你继续前进。

public class FilterComboBoxText {

    private JFrame frame;
    private final JComboBox comboBox = new JComboBox();
    private static List<String>listForComboBox= new ArrayList<String>();

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    FilterComboBoxText window = new FilterComboBoxText();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

        listForComboBox.add("Lion");
        listForComboBox.add("LionKing");
        listForComboBox.add("Mufasa");
        listForComboBox.add("Nala");
        listForComboBox.add("KingNala");
        listForComboBox.add("Animals");
        listForComboBox.add("Anims");
        listForComboBox.add("Fish");
        listForComboBox.add("Jelly Fish");
        listForComboBox.add("I am the boss");


    }

    public FilterComboBoxText() {
        initialize();
    }

    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 412, 165);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        comboBox.setEditable(true);

        comboBox.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent arg0) {

            }
        });

        for(String detail : listForComboBox) {
            comboBox.addItem(detail); 
        }
        final JTextField textfield = (JTextField) comboBox.getEditor().getEditorComponent();
        textfield.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent ke) {
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        if(!textfield.getText().isEmpty()){
                            comboBoxFilter(textfield.getText());
                        }
                    }
                });

            }
        });
        comboBox.setBounds(10, 39, 364, 29);
        frame.getContentPane().add(comboBox);
    }
     public void comboBoxFilter(String enteredText) {
         System.out.println(comboBox.getItemCount());

            if (!comboBox.isPopupVisible()) {
                comboBox.showPopup();
            }

            List<String> filterArray= new ArrayList<String>();
            for (int i = 0; i < listForComboBox.size(); i++) {
                if (listForComboBox.get(i).toLowerCase().contains(enteredText.toLowerCase())) {
                    filterArray.add(listForComboBox.get(i));
                }
            }
            if (filterArray.size() > 0) {
                DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) comboBox.getModel();
                model.removeAllElements();
                model.addElement("");
                for (String s: filterArray)
                    model.addElement(s);

                JTextField textfield = (JTextField) comboBox.getEditor().getEditorComponent();
                textfield.setText(enteredText);
            }
        }

}
于 2017-01-04T18:10:59.457 回答