Hallo zusammen,
ich habe gerade mit den Moeglichekiten von JAva 6 rumgespielt.
Ich kann nun auf sehr einfache Weise endlich einen Filter auf eine Tabelle anwenden.
DAs funktioniert sowohl mit Vector Daten, als auch mit ResultSets und zwar wesentlich einfacher
als mit FilteredRowSets.
Hier ein Beispiel:
Meine Frage nun: Hat irgendwer eine Idee, wie ich die Ergebniszellen, also die Zellen, die dem Filterkriterium entsprechen farbig dargestellt bekomme?
Irgendwie bekomme ich das nicht so hin, da sich mehrere Zellen in Abhaengigkeit der Eingabe gleichzeitig haeufig aendern muessen.
Fuer einen Tip waere ich dankbar.
Gruesse
ich habe gerade mit den Moeglichekiten von JAva 6 rumgespielt.
Ich kann nun auf sehr einfache Weise endlich einen Filter auf eine Tabelle anwenden.
DAs funktioniert sowohl mit Vector Daten, als auch mit ResultSets und zwar wesentlich einfacher
als mit FilteredRowSets.
Hier ein Beispiel:
Code:
import javax.swing.*;
public class Start
{
/**
* @param args
*/
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new JTableWithCheckbox();
}
});
}
}
Code:
import java.awt.FlowLayout;
import javax.swing.*;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import java.awt.event.*;
import java.util.regex.*;
public class JTableWithCheckbox extends JFrame
implements KeyListener
{
private JTable table = new JTable();
private CheckBoxModel model;
private JLabel label = new JLabel("Filter: ");
private JTextField txtFilter = new JTextField(15);
private TableRowSorter<TableModel> sorter;
public JTableWithCheckbox()
{
init();
}
private void init()
{
this.txtFilter.addKeyListener(this);
final String[] columnNames = {
"Serienbrief",
"Vorname",
"Name",
"Strasse",
"Plz",
"Ort"};
String[][] data = new String[3][6]; //1. Wért = row; 2. Wert = column
String[] items = { "Ute", "Schnute", "Kasimir" };
JComboBox editor = new JComboBox( items );
data[0][1] = "Ute";
data[0][2] = "Meier";
data[0][3] = "Teststrasse";
data[0][4] = "98787";
data[0][5] = "Entenhausen";
data[1][1] = "Peter";
data[1][2] = "Pan";
data[1][3] = "Irgendwo 124";
data[1][4] = "40000";
data[1][5] = "Düsseldorf";
data[2][1] = "Nils";
data[2][2] = "Holgerson";
data[2][3] = "Irgendwo 125";
data[2][4] = "80135";
data[2][5] = "München";
model = new CheckBoxModel(data, columnNames);
JTable table = new JTable(model);
DefaultCellEditor dce = new DefaultCellEditor( editor );
table.getColumnModel().getColumn(1).setCellEditor(dce);
sorter = new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500,150);
this.setLocationRelativeTo(null);
this.getContentPane().setLayout(new FlowLayout());
this.getContentPane().add(label);
this.getContentPane().add(txtFilter);
this.getContentPane().add(new JScrollPane(table));
this.setVisible(true);
}
public void keyPressed(KeyEvent k) {
// irgendwann mal
}
public void keyReleased(KeyEvent k)
{
String text = txtFilter.getText();
if (text.length() == 0) {
sorter.setRowFilter(null);
} else {
try {
sorter.setRowFilter(
RowFilter.regexFilter(text));
} catch (PatternSyntaxException pse) {
System.err.println("Bad regex pattern");
}
}
}
public void keyTyped(KeyEvent k ) {
// irgendwann mal
}
}
Code:
import javax.swing.table.DefaultTableModel;
public class CheckBoxModel extends DefaultTableModel
{
public CheckBoxModel(String[][] r, String[] c)
{
super(r,c);
}
public Class getColumnClass(int columnIndex)
{
Class returnValue;
if(columnIndex == 0) {
return Boolean.class; //checkbox
}
if ((columnIndex >= 0) && (columnIndex < getColumnCount())) {
returnValue = getValueAt(0, columnIndex).getClass();
} else {
returnValue = Object.class;
}
return returnValue;
}
}
Meine Frage nun: Hat irgendwer eine Idee, wie ich die Ergebniszellen, also die Zellen, die dem Filterkriterium entsprechen farbig dargestellt bekomme?
Irgendwie bekomme ich das nicht so hin, da sich mehrere Zellen in Abhaengigkeit der Eingabe gleichzeitig haeufig aendern muessen.
Fuer einen Tip waere ich dankbar.
Gruesse