2016-05-12 1 views
1

Ich habe zwei Comboboxen jeder von ihnen filtert eine diferent Reihe meiner JTable, was ich tun möchte, ist mein Filter mantain auf jeden Benutzer wählen,Bind zwei JComboBox Filter

Beispiel:

Bei der Moment

Erste ComboBox wählt eine Option und Tabelle gefiltert wird nur die Anzeige einer Option

Second ComboBox Wählen Option B und Tabelle gefiltert wird nur Option B Anzeige

Was ich brauche, ist:

Erste ComboBox wählt eine Option und Tabelle gefiltert wird angepasst Fälle für die Option Anzeige A

Dann

Zweite ComboBox wählen Sie Option B und Tabelle müssen Werte anzeigen für Passendes Gehäuse der ersten ComboBox und der zweiten ComboBox mit der Option 'A + B'

Dies ist mein ComboBox-Code, der die Tabelle individuell filtert :

comboBox.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent event) { 
     RowFilter<DefaultTableModel, Object> rf = RowFilter.regexFilter(comboBox.getSelectedItem().toString(), 2); 
     sorter.setRowFilter(rf); 
    } 
}); 

comboBox_1.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent event) { 
     RowFilter<DefaultTableModel, Object> rf = RowFilter.regexFilter(comboBox_1.getSelectedItem().toString(), 3); 
     sorter.setRowFilter(rf);     
    } 
}); 

So gibt es eine Möglichkeit, immer wieder Fälle von beiden Comboboxen entsprechen, wenn eine Option ausgewählt ist?

Antwort

2

Verwendung RowFilter.andFilter() mehrere Filter ermöglichen, einen einzigen JTable mit einer AND Logik angewendet werden (nur, wenn beide Filter wahr sind, wird das Element angezeigt) (es gibt auch eine OR, NOT, ...).

nicht getestet, aber ich denke, so etwas wie dies funktionieren könnte:

// Collection of filters to be applied to your table 
List<RowFilter<DefaultTableModel, Object>> filters = new ArrayList<>(); 

comboBox.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
     if(filters.isEmpty()) 
      filters.add(RowFilter.regexFilter(comboBox.getSelectedItem().toString(), 2)); 
     else 
      filters.set(0, RowFilter.regexFilter(comboBox.getSelectedItem().toString(), 2)); 
     // Apply filters 
     sorter.setRowFilter(RowFilter.andFilter(filters)); 
    } 
}); 

comboBox_1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
     if(filters.size() < 2) 
      filters.add(RowFilter.regexFilter(comboBox_1.getSelectedItem().toString(), 3)); 
     else 
      filters.set(1, RowFilter.regexFilter(comboBox_1.getSelectedItem().toString(), 3)); 
     // Apply filters 
     sorter.setRowFilter(RowFilter.andFilter(filters));   
    } 
}); 
+0

omg das ist genau das, was ich perfekt ich danke Ihnen sehr nötig! –

0

Sie können so etwas wie dieses verwenden, verwendet es ComboBoxModel, so dass Sie Elemente dynamisch zu Ihrem JComboBox hinzufügen:

Integer[] optionsForA = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 
JComboBox comboBoxA = new JComboBox(optionsForA);//A 
Vector comboItems = newVector(); 
comboItems.add("A"); 
comboItems.add("B"); 
comboItems.add("C"); 
comboItems.add("D"); 
comboItems.add("E"); 
final DefaultComboBoxModel mod = new DefaultComboBoxModel(comboItems); 
JComboBox comboBoxB = new JComboBox(mod);//B 

actionsCB.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent e) { 
      if()//your condition { 

       for (int i = numbers.lenght; i < numbers.length + mod.size() ; i++) { 
        mod.addElement(optionsForA[i]); //add options from A to B 

       }    
      } 
     } 
    }); 

Weitere Informationen über Optionen JComboBox Hinzufügen dynamisch Beitrag check out: Dynamically adding items to a JComboBox Oder die DefaultComboBoxModel API hier: https://docs.oracle.com/javase/7/docs/api/javax/swing/DefaultComboBoxModel.html

Hoffe es hilft!