2012-05-14 2 views
3

У меня есть этот JComboBox, у которого есть его редактируемое свойство true. Мне было интересно, может ли я добавить List<String> в фильтрацию JComboBox?JComboBox Filter

Например, у меня есть new String[] {"a", "a1", "b", "c", "a3"}, добавленный в JComboBox с редактируемым true. Когда я ввела a на JComboBox, вернул бы список new String[] {"a", "a1", "a3"}.

Возможно ли это?

Заранее спасибо.

ответ

3

Самого простой из способов является использование AutocComplete JComboBox/JTextField, того JComboBox'es всплывающих списка.Возвратов отфильтрованных товаров

+1

Есть ли в нем короткодействующая версия? –

+0

уверен, что есть много вариантов об этой опции, но я бы посоветовал не использовать это, этот код правильно реализовал все слушатели, его события и уведомители тоже, – mKorbel

+0

Я согласен, вопрос в том, где я мог бы увидеть это короткое - закодированная версия? –

0

Вот что вам нужно сделать. создайте массивList или List и добавьте туда все свои предметы. Создайте combobox и зациклируйте все ваши объекты и добавьте их в comboBox Затем создайте метод фильтрации. Это не идеальный ответ, но он заставит вас идти.

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

} 
Смежные вопросы