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 回答