どのように私は、JTableの行(目に見えないを作る)隠すことができますか?

StackOverflow https://stackoverflow.com/questions/944006

  •  09-09-2019
  •  | 
  •  

質問

それを行う方法はありますか?

役に立ちましたか?

解決

最高を最も簡単な方法は、モデルから対応する要素を削除することです。

他のヒント

あなたが行をフィルタするために使用することができますRowFilter<DefaultTableModel, Object>クラスがあります。 DefaultTableModelでは、独自のモデルに置き換えることができます。フィルターに、メソッドを実装します。

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

ListSelectionEventsを聞いて、たとえば、行にアクセスすると、お使いのモデルでは、完全な行インデックスに見える行のインデックスを変換することを忘れないでください。 Javaは、同様にこの機能を提供します:

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

    ...
}

あなたはのためにフィルタリングされた値が移入されている各列の配列リストを設定し、カスタムレンダラでこれらを実装することができます。細胞全体の行の値が満たされない場合、レンダラは再帰行+ 1と自分自身を呼び出す。

セルの行は、それがレンダリングされる、基準を満たしていなければ、別のArrayListが既にレンダリング行番号を格納し、その最良の例により説明この方法は、顧客レンダラにある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;
}
scroll top