Hallo,
bin jetzt ein Stück weiter, als vorheriger Post.
Ziel ist nach Eingabe z.B. "B" in ein Textfeld, in JTable table nur noch die Einträge mit keys, die mit "B" beginnen darzustellen.
Was funktioniert ist, dass die Eingabe von einem Textfeld an
sorter.setRowFilter(RowFilter.regexFilter(text)); weitergegeben wird.
Problem ist jetzt, dass keine Daten mehr im JTable angezeigt werden, JTable ist nach setRowFilter leer. JTable wird von MapTableModel extends AbstractTableModel befüllt.
Ich habe ein Bsp. von google (weis den Link nicht mehr). Bis auf den Unterschied, dass dort die Daten in Object rows gespeichert sind, ist mir kein Unterschied zu sehen. Wie ist der Zusammen´han zwischen view-JTable und Daten-JTableModel? Mit dem RowFilter möchte ich nur JTable "durchsuchen" und nicht das Model.
schon mal vielen Dank..
bin jetzt ein Stück weiter, als vorheriger Post.
Ziel ist nach Eingabe z.B. "B" in ein Textfeld, in JTable table nur noch die Einträge mit keys, die mit "B" beginnen darzustellen.
Was funktioniert ist, dass die Eingabe von einem Textfeld an
sorter.setRowFilter(RowFilter.regexFilter(text)); weitergegeben wird.
Problem ist jetzt, dass keine Daten mehr im JTable angezeigt werden, JTable ist nach setRowFilter leer. JTable wird von MapTableModel extends AbstractTableModel befüllt.
Code:
DocumentListener documentListener = new DocumentListener() {
public void changedUpdate(DocumentEvent documentEvent) {
printIt(documentEvent);
}
public void insertUpdate(DocumentEvent documentEvent) {
printIt(documentEvent);
}
public void removeUpdate(DocumentEvent documentEvent) {
printIt(documentEvent);
}
private void printIt(DocumentEvent documentEvent) {
DocumentEvent.EventType type = documentEvent.getType();
if (type.equals(DocumentEvent.EventType.CHANGE)) {
} else if (type.equals(DocumentEvent.EventType.INSERT)) {
wordToFindInsert();
} else if (type.equals(DocumentEvent.EventType.REMOVE)) {
}
}
};
Code:
private void wordToFindInsert()
{
String text = wordToFind.getText();
if (text.length() == 0)
{
sorter.setRowFilter(null);
}
else
{
try
{
sorter.setRowFilter(RowFilter.regexFilter(text));
//ble.getRowSorter().getSortKeys();
}
catch (PatternSyntaxException pse) {
System.err.println("Bad regex pattern");
}
}
}
Ich habe ein Bsp. von google (weis den Link nicht mehr). Bis auf den Unterschied, dass dort die Daten in Object rows gespeichert sind, ist mir kein Unterschied zu sehen. Wie ist der Zusammen´han zwischen view-JTable und Daten-JTableModel? Mit dem RowFilter möchte ich nur JTable "durchsuchen" und nicht das Model.
Code:
public class FilterTable {
public static void main(String args[]) {
Runnable runner = new Runnable() {
public void run() {
JFrame frame = new JFrame("Sorting JTable");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rows[][] = { { "AMZN", "Amazon", 41.28 },
{ "EBAY", "eBay", 41.57 },
{ "GOOG", "Google", 388.33 },
{ "MSFT", "Microsoft", 26.56 },
{ "NOK", "Nokia Corp", 17.13 },
{ "ORCL", "Oracle Corp.", 12.52 },
{ "SUNW", "Sun Microsystems", 3.86 },
{ "TWX", "Time Warner", 17.66 },
{ "VOD", "Vodafone Group", 26.02 },
{ "YHOO", "Yahoo!", 37.69 } };
Object columns[] = { "Symbol", "Name", "Price" };
TableModel model = new DefaultTableModel(rows, columns) {
public Class getColumnClass(int column) {
Class returnValue;
if ((column >= 0) && (column < getColumnCount())) {
returnValue = getValueAt(0, column).getClass();
} else {
returnValue = Object.class;
}
return returnValue;
}
};
JTable table = new JTable(model);
//Notice this line below:
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(
model);
table.setRowSorter(sorter);
JScrollPane pane = new JScrollPane(table);
frame.add(pane, BorderLayout.CENTER);
JPanel panel = new JPanel(new BorderLayout());
JLabel label = new JLabel("Filter");
panel.add(label, BorderLayout.WEST);
final JTextField filterText = new JTextField("SUN");
panel.add(filterText, BorderLayout.CENTER);
frame.add(panel, BorderLayout.NORTH);
JButton button = new JButton("Filter");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String text = filterText.getText();
if (text.length() == 0) {
sorter.setRowFilter(null);
} else {
try {
sorter
.setRowFilter(RowFilter
.regexFilter(text));
} catch (PatternSyntaxException pse) {
System.err.println("Bad regex pattern");
}
}
}
});
frame.add(button, BorderLayout.SOUTH);
frame.setSize(300, 250);
frame.setVisible(true);
}
};
EventQueue.invokeLater(runner);
}
}
schon mal vielen Dank..