1
DBOperations objDB;
ArrayList alstStock;
private TableRowSorter sorter;
public void viewDailyStock() {
    initComponents();
    setSize(Toolkit.getDefaultToolkit().getScreenSize());
    objDB = new DBOperations();
    alstStock = objDB.getStockList();
    generateTable();
    txtSearch.getDocument().addDocumentListener(
            new DocumentListener() {
        @Override
                public void changedUpdate(DocumentEvent e) {
                    newFilter();
                }
        @Override
                public void insertUpdate(DocumentEvent e) {
                    newFilter();
                }
        @Override
                public void removeUpdate(DocumentEvent e) {
                    newFilter();
                }
            });
    setVisible(true);
}


void generateTable() {
    Object data[][] = new Object[alstStock.size()][10];
    String date = null;
    for (int i = 0; i < alstStock.size(); i++) {
        StockBean objBean = (StockBean) alstStock.get(i);
        data[i][0] = i + 1;
        data[i][1] = objBean.getBrand();
        data[i][2] = objBean.getProductCode();
        data[i][3] = objBean.getProductName();
        data[i][8] = objBean.getItemInBox();
        SimpleDateFormat df = new SimpleDateFormat("EEEE, MMM d,yyyy");
        date = df.format(objBean.getDate());
        data[i][4] = date;
        data[i][5] = objBean.getUser();
        data[i][6] = objBean.getLotNumber();
        data[i][7] = objBean.getQtyInItem();
        data[i][9] = objBean.getQtyInBox();
    }
    String header[] = {"S.No.", "Brand", "Code", "Name", "Date", "Added By", "Lot No.", "Qty In Item", "Item", "Qty In Boxes"};

    tblStock = new JTable(data,header);
    sorter=new TableRowSorter(tblStock.getModel());
    tblStock.setRowSorter(sorter);
    jScrollPane1.setViewportView(tblStock);
    setWidth();
    tblStock.setAutoCreateRowSorter(true);

}

private void newFilter() {
    RowFilter rf = null;
    try {
        rf = RowFilter.regexFilter(txtSearch.getText(), 3);
    } catch (java.util.regex.PatternSyntaxException e) {
        System.out.println("Exception "+e);
    }
    sorter.setRowFilter(rf);
}

DBOperationsは、データベーステーブルからデータをフェッチするためのクラスです。StockBeanは、getterメソッドとsetterメソッドを持つオブジェクトのクラスです。

これは、テキストフィールドを使用してjtableの4列目に行フィルターを実装する私のコードですが、機能していません。私を助けてください...

4

2 に答える 2

1

このコードを使用して問題を解決できます。

   private void txtSearchKeyReleased(java.awt.event.KeyEvent evt) {                                        

  String target = txtSearch.getText();  
  TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tblStock.getModel());
  tblStock.setRowSorter(sorter);
  sorter.setRowFilter(RowFilter.regexFilter(".*"+target+".*", yourColumnIndice));

  }       

それはあなたのために働くはずです。

于 2012-08-30T21:29:55.657 に答える
0

インデックスは 0 ベースなので、3 列目がインデックス 2 です。

また、あなたのコメントnewFilter()は正しくありません。

private void newFilter() {
    RowFilter rf = null;
    //If current expression doesn't parse, don't update.
    try {
        rf = RowFilter.regexFilter(txtSearch.getText(), 3);
    } catch (java.util.regex.PatternSyntaxException e) {
        System.out.println("Exception "+e);
    }
    sorter.setRowFilter(rf);
}

setRowFilter()例外がスローされても呼び出しています。したがって、テーブルが現在フィルター処理されており、新しいフィルター文字列によって例外が発生した場合、フィルターは にリセットされnullます。これは、現在のフィルターが削除され、テーブルの表示更新されることを意味します。

于 2012-08-28T14:48:41.663 に答える