G
Gast
Gast
Hallo an Alle
ich habe folgendes PB.
Ich lese die Daten aus der Datenbank und fülle meine JTable aus .. alles läuft prima und dann habe ich auf mein JFrame ein JTextFiled für Suche ein bestimmtes Ojekt ( Kürzel oder Name) ..
ein JButton ist zuständig für dieses Event.. alles klapt auch nur ich möchte jetzt diese Suche dynamisch machen
das heißt ich möchte dieser SuchenButton nicht verwenden um zu suchen sondern die Tabelle automatische filtern
bei jeder Eingabe in der Jtextfield...
kann man mir helfen ..
Hier ist meine code
// Sonst funktioniert alles
Die Version funktioniert dynamisch leider kann ich für Meine Datenbank anwenden .. es klappt nicht
ich habe folgendes PB.
Ich lese die Daten aus der Datenbank und fülle meine JTable aus .. alles läuft prima und dann habe ich auf mein JFrame ein JTextFiled für Suche ein bestimmtes Ojekt ( Kürzel oder Name) ..
ein JButton ist zuständig für dieses Event.. alles klapt auch nur ich möchte jetzt diese Suche dynamisch machen
das heißt ich möchte dieser SuchenButton nicht verwenden um zu suchen sondern die Tabelle automatische filtern
bei jeder Eingabe in der Jtextfield...
kann man mir helfen ..
Hier ist meine code
Code:
package de.Model;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.util.regex.*;
public class FilterTable1 {
static JdbcSwingTable1 m_Table=null;
static ResultSetTableModel model;
public static void main(String args[])throws Exception {
m_Table=new JdbcSwingTable1();
model = m_Table.conected();
//m_Table.frameErzeugen(model);
Runnable runner = new Runnable() {
public void run() {
JFrame frame=m_Table.jTableErzeuge(model);
JTable table = new JTable(model);
final TableRowSorter<ResultSetTableModel> sorter =
new TableRowSorter<ResultSetTableModel>(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("");
panel.add(filterText, BorderLayout.CENTER);
frame.add(panel, BorderLayout.NORTH);
JButton button = new JButton("Filter");
##################################################################
// Das habe ich versucht zu machen aber Fehler bei new CaretListener()
filterText.addCaretListener(new CaretListener() {
public void caretUpdate(CaretEvent e) {
final String text=filterText.getText();
if (text==null) {
sorter.setRowFilter(null); // pas de filtre
return;
}
sorter.setRowFilter(new RowFilter<TableModel,Integer>() {
@Override
public boolean include(Entry<? extends TableModel,? extends Integer> entry) {
// File file=entry.getModel().getFile(entry.getIdentifier());
// return file.getName().startsWith(text);
return ((String)entry.getValue(0)).startsWith(text);
}
});
}
});
#################################################################
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);
}
}
// Sonst funktioniert alles
Die Version funktioniert dynamisch leider kann ich für Meine Datenbank anwenden .. es klappt nicht
Code:
package net.Cam;
import javax.swing.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.util.regex.*;
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);
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");
filterText.addCaretListener(new CaretListener() {
public void caretUpdate(CaretEvent e) {
final String text=filterText.getText();
if (text==null) {
sorter.setRowFilter(null); // pas de filtre
return;
}
sorter.setRowFilter(new RowFilter<TableModel,Integer>() {
@Override
public boolean include(Entry<? extends TableModel,? extends Integer> entry) {
// File file=entry.getModel().getFile(entry.getIdentifier());
// return file.getName().startsWith(text);
return ((String)entry.getValue(0)).startsWith(text);
}
});
}
});
// 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);
}
}