Reputation: 11
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 is a class for fetching data from database table. StockBean is a class of object with the getter and setter method.
This is my code of implementing row filter to the 4th column of jtable with a textfield but its not working. Please help me...
Upvotes: 1
Views: 1680
Reputation: 303
You can solve the problem by using this code :
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));
}
That should work for you.
Upvotes: 1
Reputation: 17321
Indexes are 0-based, so the 3rd column is index 2.
Also, your comment in newFilter()
is incorrect.
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);
}
You are calling setRowFilter()
even if an exception is throw. Therefore if the table is currently being filtered and the new filter string causes an exception, the filter is reset to null
. This means the current filter will be removed and the table's display will update.
Upvotes: 0