Frage

Gibt es eine Möglichkeit, es zu tun?

War es hilfreich?

Lösung

Das bester einfachste Weg, um das entsprechende Element aus dem Modell zu entfernen wäre.

Andere Tipps

Es ist die RowFilter<DefaultTableModel, Object> Klasse, die Sie herausfiltern Zeilen verwenden können. Die DefaultTableModel kann durch Ihr eigenes Modell ersetzt werden. So filtern, implementieren die Methode

@Override
public boolean include(Entry entry) {
    // All rows are included if no filter is set
    if (filterText.isEmpty())
        return true;

    // If any of the column values contains the filter text,
    // the row can be shown
    for (int i = 0; i < entry.getValueCount(); i++) {
        String value = entry.getStringValue(i);
        if (value.toLowerCase().indexOf(filterText) != -1)
            return true;
    }

    return false;
}

Wenn Zeilen zugreifen, zum Beispiel auf ListSelectionEvents hören, vergessen Sie nicht den sichtbaren Zeilenindex zur vollständigen Zeilenindex in Ihrem Modell zu übersetzen. Java bietet eine Funktion für diese auch:

public void valueChanged(ListSelectionEvent e) {
    ListSelectionModel lsm = (ListSelectionModel) e.getSource();

    int visibleRowIndex = ... // Get the index of the selected row

    // Convert from the selection index based on the visible items to the
    // internal index for all elements.
    int internalRowIndex = tableTexts
            .convertRowIndexToModel(visibleRowIndex);

    ...
}

Schauen Sie sich Sun Tutorial für JTables und schauen am Sortieren und Filtern Abschnitt.

Sie könnten ein Arraylisten für jede Spalte einrichten, die für von Werten ausgefüllt werden gefiltert und diese in einem benutzerdefinierten Renderer implementieren. Wenn ein Zellen gesamte Zeilenwerte nicht der Renderer erfüllt sind rekursiv nennt sich mit der Zeile + 1.

, wenn die Zellen Reihe Kriterien nicht erfüllt, es gerendert wird, speichert eine andere Arraylist die Zeilennummern bereits gemacht, seine besten durch Beispiel erläutert dieses Verfahren ist in der Kunden Renderer erweitert JLabel

public Component getTableCellRendererComponent(JTable table, Object color,
        boolean isSelected, boolean hasFocus, int row, int column) {

    Object value;
    String s;

    try {
        if (row == 0) {
            drawn[column].clear();
        }// drawn is arraylist which stores cols rend
        if (row > table.getModel().getDataVector.size()) {
            return null;
        }// if we go too far
        if (drawn[column].contains(Integer.toString(row)) == true) {
            // already rendered?
            return getTableCellRendererComponent(table, color, isSelected,
                    hasFocus, (row + 1), column);
        }// render row+1

        for (int i = 0; i < filters.length; i++) {
            value = table.getModel().getValueAt(row, i);
            s = (i == 1) ? df.format(value) : value.toString();
            if (filters[i].contains(s) != true) {
                //try and put in next row, if succeeds when it reaches column 8 it adds row to
                return getTableCellRendererComponent(table, color,
                        isSelected, hasFocus, (row + 1), column);
            }
        }

        value = table.getModel().getValueAt(row, column);

        setFont(getFont().deriveFont(Font.BOLD));

        if ((isSelected == false)) {

            if ((column == 1)) {
                setForeground(Color.magenta);
            }// just formatting
            else {
                setForeground(Color.black);
                setBackground(Color.white);
            }

        } else {
            setBackground(Color.blue);
            setForeground(Color.white);
        }

        if ((column == 1))// col 1 is a date, other columns strings
        {
            setText((value == null) ? "" : df.format(value));
        } else {
            setText((value == null) ? "" : value.toString());
        }

        todayStr = df.format(new java.util.Date());
        dateval = table.getModel().getValueAt(row, 1);
        String datevalStr = df.format(dateval);
        if (datevalStr.equals(todayStr)) {
            setForeground(Color.red);
        }
        drawn[column].add(Integer.toString(row));// mark row as rendered

    } catch (Exception e) {
        e.getMessage();
        return null;
    }
    return this;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top