package table;
/*
* TableFilterDemo_1.java
*/
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.awt.*;
public class TableFilterDemo_1 extends JPanel {
private JTable table;
private TableRowSorter<MyTableModel> sorter;
private String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};
private Object[][] data = {
{"Mary", "Campione",
"Snowboarding", new Integer(5), new Boolean(false)
},
{"Alison", "Huml",
"Rowing", new Integer(3), new Boolean(true)
},
{"Kathy", "Walrath",
"Knitting", new Integer(2), new Boolean(false)
},
{"Sharon", "Zakhour",
"Speed reading", new Integer(20), new Boolean(true)
},
{"Philip", "Milne",
"Pool", new Integer(10), new Boolean(false)
},
{"Isaac", "Rabinovitch",
"Nitpicking", new Integer(1000), new Boolean(false)
}
};
public TableFilterDemo_1() {
super();
setLayout(new BorderLayout());
//Create a table with a sorter.
MyTableModel model = new MyTableModel(data, columnNames);
sorter = new TableRowSorter<MyTableModel>(model);
table = new JTable(model);
table.setRowSorter(sorter);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
JButton bt = new JButton("Filter");
add(bt, BorderLayout.NORTH);
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
newFilter();
}
});
}
/**
* Update the row filter regular expression
*/
private void newFilter() {
RowFilter<MyTableModel, Object> rf = null;
//If current expression doesn't parse, don't update.
try {
rf = RowFilter.regexFilter("Huml", 1);
} catch (java.util.regex.PatternSyntaxException e) {
return;
}
sorter.setRowFilter(rf);
}
class MyTableModel extends DefaultTableModel {
public MyTableModel(Object[][]data, Object[] columnNames){
super(data, columnNames);
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
if (col < 2) {
return false;
} else {
return true;
}
}
}
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Table Filter Demo_1");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
TableFilterDemo_1 newContentPane = new TableFilterDemo_1();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}