TableCellRenderer wie umsetzen?

Status
Nicht offen für weitere Antworten.

FenchelT

Bekanntes Mitglied
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:
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
 

BlinderOpa

Mitglied
versuch einen TableCellRenderer...

Code:
//eigener Renderer bauen...
class MyTableCellRenderer extends DefaultTableCellRenderer
    {
    public java.awt.Component getTableCellRendererComponent(
	JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column )
	{
	super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column );
                if (column == 0)
                    { 
                        setBackground(java.awt.Color.green );
                    }
                else 
                    {
                         setBackground(table.getBackground());
                     }
                  //kannst du auch mit selected machen...
                  // oder mit value.equals/=="blabla"... if halt...^^
                  //du musst aber IMMER mit else arbeiten, da er z.B. die Farbeinstellungen sich solange merkt 
                  //und umbaut, bis andere Einstellugnen gesetzt werden.

                    }
    }
//den Renderer zum TableCellRenderer machen...
TableCellRenderer ren = new MyTableCellRenderer();

//den TableCellRenderer setzen... 
table.setDefaultRenderer(Object.class, ren );

müsste so gehen...

mein Problem dabei ist nurnoch, dass der Renderer anscheinent nicht geupdated wird, wenn ich mit einem Rowsorter meine table sortier...
also der erkennt im moment noch nicht wirklich, wenn ich umsortiere/Filtere...
aber das liegt glaub ich daran, dass ich irgendwo die falschen Daten dazu hernehme...
nämlich das Array der Table... und nicht auf wie es sein sollte auf die gefilterte/sortierte Tabelle...^^

PS: dadurch, dass ich dir gerade geholfen habe, habe ich meinen eigenen Fehler gefunden...:D danke...;)*g*
 
G

Gast

Gast
Ich habe im Moment das gleich Problem, ich habe einen Datensatz sortiert und möchte im Nachhinein Zellen mit einem bestimmten Wert markieren, das klappt leider nicht, weil er anscheinend mit dem Werte-Vergleich bzw. mit der Aktualisierung Probleme hat. Kann das sein, dass der Render nach dem automatischen Verändern der Zellen nicht die Änderungen berücksichtigt bzw. die Zellen markiert sondern erst nach manuellem Verändern des Inhalts?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B TableCellRenderer rendert Integer/Boolean Felder nicht AWT, Swing, JavaFX & SWT 4
M Swing TableCellRenderer elegant anpassen AWT, Swing, JavaFX & SWT 3
D Swing Mit TableCellRenderer einzelne Zellen markieren AWT, Swing, JavaFX & SWT 3
O Swing TableCellRenderer und JComboBox AWT, Swing, JavaFX & SWT 4
C Swing TableCellRenderer: setText() vs. setIcon() AWT, Swing, JavaFX & SWT 5
E Swing TableCellRenderer für alle Splaten setzen?! AWT, Swing, JavaFX & SWT 3
M gleicher TableCellRenderer für mehrere unterschiedliche Tabellen AWT, Swing, JavaFX & SWT 5
A Swing TableCellRenderer ändert die Zeilenfarbe zu spät AWT, Swing, JavaFX & SWT 3
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
J NullPointerException bei Benutzung vom TableCellRenderer AWT, Swing, JavaFX & SWT 3
U TableCellRenderer: Problem mit Timestamp/Date AWT, Swing, JavaFX & SWT 2
U TableCellRenderer UND prepareRenderer AWT, Swing, JavaFX & SWT 12
C Swing TableCellRenderer AWT, Swing, JavaFX & SWT 10
U TableCellRenderer und setBackground AWT, Swing, JavaFX & SWT 20
H Swing TableCellRenderer für verschiedene Spalten AWT, Swing, JavaFX & SWT 11
C Swing Problem mit TableCellRenderer in Verbindung mit TableRowSorter AWT, Swing, JavaFX & SWT 2
R JTable - TableCellRenderer AWT, Swing, JavaFX & SWT 3
R JTable - TableCellRenderer - BufferedImage AWT, Swing, JavaFX & SWT 9
S TableCellRenderer: JLabel-Background in JPanel AWT, Swing, JavaFX & SWT 7
R JTable mit TableCellRenderer AWT, Swing, JavaFX & SWT 10
R JTable - TableCellRenderer AWT, Swing, JavaFX & SWT 2
D TableCellRenderer rendert einfach nicht! AWT, Swing, JavaFX & SWT 4
S TableCellRenderer setForeground AWT, Swing, JavaFX & SWT 5
I Problem mit TableCellRenderer AWT, Swing, JavaFX & SWT 3
K TableCellRenderer Problem AWT, Swing, JavaFX & SWT 3
D JTable TableCellRenderer AWT, Swing, JavaFX & SWT 2
J JTable und TableCellRenderer AWT, Swing, JavaFX & SWT 2
G TableCellRenderer Background variiert darstellen AWT, Swing, JavaFX & SWT 3
P TableCellRenderer mit einem TableRowSorter AWT, Swing, JavaFX & SWT 4
D TableCellRenderer PRoblem AWT, Swing, JavaFX & SWT 3
G TableCellRenderer soll ganze ausgewählte Zeile markieren AWT, Swing, JavaFX & SWT 2
S TableCellRenderer deaktivieren AWT, Swing, JavaFX & SWT 13
J TableCellRenderer AWT, Swing, JavaFX & SWT 5
S JTree mal anders (TableCellRenderer) AWT, Swing, JavaFX & SWT 6
S TableCellRenderer, Performance AWT, Swing, JavaFX & SWT 9
M Objekt in TableCellRenderer packen, warum ein Fehler? AWT, Swing, JavaFX & SWT 2
T TableCellRenderer Problem AWT, Swing, JavaFX & SWT 6
B TableCellRenderer + JComboBoxen AWT, Swing, JavaFX & SWT 2
M mvvm umsetzen ohne fxml AWT, Swing, JavaFX & SWT 0
M Menü ohne Menübar umsetzen[SWT] AWT, Swing, JavaFX & SWT 8
M Design in Java umsetzen AWT, Swing, JavaFX & SWT 3
D Swing MVC in Projekt umsetzen AWT, Swing, JavaFX & SWT 71
cosmic Dartboard in JFrame umsetzen AWT, Swing, JavaFX & SWT 5
F JToggleButton in AWT umsetzen (Button soll stecken bleiben) AWT, Swing, JavaFX & SWT 4
W Wie Layout mit welchen Swing Managern umsetzen? AWT, Swing, JavaFX & SWT 24
F Fenster im Fenster wie mit SWING umsetzen? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben