Java Jtable Rowfilter funktioniert nicht richtig?Java

Java-Forum
Anonymous
 Java Jtable Rowfilter funktioniert nicht richtig?

Post by Anonymous »

Ich habe ein JTable (defaultTablemodel), das verschiedene Datenzeilen enthält, die ich gerne filtern würde. Das Programm ermittelt korrekt heraus, welche Zeilen filtern sollen, und fügt die Regex -Zeichenfolge (entsprechend den Daten einer bestimmten Spalte, wenn keine String alle übereinstimmt) zu einer ArrayList von RowFilters hinzu. Diese ArrayList wird dann als RowFilter.AndFilter festgelegt. Aber wo es Daten anzeigen sollte, gibt es normalerweise nichts oder eine Art kaputte Daten. Ich habe in den letzten 2 Tagen verschiedene Ansätze ausprobiert und unzählige Dinge online gelesen, aber ich kann den Filter nicht ordnungsgemäß funktionieren lassen. Wo ist der Fehler? < /P>
In der Funktion, die den Filter auslösen sollte, sieht es so aus:

Code: Select all

TableRowSorter sorter = new TableRowSorter(table.getModel());
sorter.setRowFilter(null);
table.setRowSorter(sorter);

List filterList = new ArrayList();

boolean missing = false;

//some logic to set missing to true/false depending on whether to filter or not

if (missing)
filterList.add(RowFilter.regexFilter(dataString)); //dataString is the exact string in a specific column of the row to be filtered
< /code>
und nach Abschluss der Berechnungen sollte der Filter ausgeführt werden: < /p>
sorter.setRowFilter(RowFilter.andFilter(filterList, 5));
< /code>
Jetzt wird die Tabelle nur leer. Keine Daten. .... Oder in Klammern einfügen "(" + datastring + ")" 
, aber es wird nicht verwendet. Ich habe es sogar ohne den Spaltenindex versucht. Das Ergebnis ist immer das gleiche, während mindestens 6 Zeilen bleiben sollten. < /P>
Schätzen Sie Ihre Hilfe. Das Programm berechnet korrekt die Werte, die nicht in der Tabelle angezeigt werden dürfen, aber das Ergebnis ist eine leere Tabelle ... < /p>

Code: Select all

import java.awt.FlowLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;
import javax.swing.RowFilter;
import javax.swing.table.*;

public class mainTable extends javax.swing.JFrame {

private TableRowSorter sorter;

public mainTable() {
initComponents();

sorter = new TableRowSorter(table.getModel());
sorter.setRowFilter(null);
table.setRowSorter(sorter);

setTable();
setCombo();
}

private void initComponents() {
jPanel = new JPanel();
table = new javax.swing.JTable();
comboBox = new javax.swing.JComboBox();
jButton1 = new javax.swing.JButton();

setLayout(new FlowLayout());
setSize(400, 400);

DefaultTableModel tableModel = new DefaultTableModel();
tableModel.addColumn("Stadt");
tableModel.addColumn("Landkreis");
table.setModel(tableModel);

jButton1.setText("Filter");
jButton1.addActionListener(this::jButton1ActionPerformed);

jPanel.add(comboBox);
jPanel.add(jButton1);
jPanel.add(table);
getContentPane().add(jPanel);
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
filter();
}

public static void main(String args[]) {
new mainTable().setVisible(true);
}

private void setTable() {
ArrayList cities = new ArrayList();
ArrayList landkreise = new ArrayList();
String[] rows = new String[2];

DefaultTableModel tbm = (DefaultTableModel) table.getModel();

cities.add("Husum");
cities.add("Westerland");
cities.add("Hannover");
cities.add("Uelzen");
cities.add("Rotenburg");
cities.add("Verden");
cities.add("Nienburg");

landkreise.add("Nordfriesland");
landkreise.add("Nordfriesland");
landkreise.add("Region Hannover");
landkreise.add("Uelzen");
landkreise.add("Rotenburg");
landkreise.add("Verden");
landkreise.add("Nienburg");

for (int i = 0; i < cities.size(); i++) {
rows[0] = cities.get(i);
rows[1] = landkreise.get(i);
tbm.addRow(rows);
}
}

private void setCombo() {
DefaultTableModel tbm = (DefaultTableModel) table.getModel();

for (int i = 0; i < tbm.getRowCount(); i++)
comboBox.addItem(tbm.getValueAt(i, 1).toString());
}

private void filter() {
sorter.setRowFilter(null);

String filterText = comboBox.getSelectedItem().toString();
List filterLandkreis = new ArrayList();

for (int i = table.getRowCount(); i > 0; i--) {

boolean filter = false;
filter = !table.getValueAt(i-1, 1).toString().equals(filterText); //the value of the combo shall not be shown in the table

if (filter)
filterLandkreis.add(RowFilter.regexFilter(table.getValueAt(i-1, 1).toString()));
}
sorter.setRowFilter(RowFilter.andFilter(filterLandkreis));
}

private javax.swing.JComboBox comboBox;
private javax.swing.JButton jButton1;
private JPanel jPanel;
private javax.swing.JTable table;
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post