CellRenderer einzelne zellen Hintergrund

Status
Nicht offen für weitere Antworten.

java66

Aktives Mitglied
Hallo zusammen,
habe eine frage ich habe ein JTable in die ich werte aus einer DB lade, nun sollen alle Zellen in EINER SPALTE in der JTable die den inhalt notfound haben einen roten hintergrund bekommen.
irgendwie funzt das nicht bei mir habe eine eigene klasse für den cellrenderer geschrieben.
Danke für eure hilfe


Java:
import java.awt.Color;
import java.awt.Component;

import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.table.TableCellRenderer;

public class MyCellRend extends JLabel implements TableCellRenderer
{
	
private static String COLUMN_STRINGTYPE="STRING";
private static String COLUMN_NUMBERTYPE="NUMBER";
String ColType="";

public MyCellRend()
{
setOpaque(false);
this.setBackground(UIManager.getColor("InputField.Required"));
}

public Component getTableCellRendererComponent(JTable table, Object value,
	boolean isSelected, boolean hasFocus, int row, int column) {
	setBorder(table.getBorder());
	setSize(getComponentCount(), getComponentCount());
	this.setPreferredSize(getSize());
	
	setHorizontalAlignment(SwingConstants.RIGHT);
	
if(row % 2==0){}
	setValue(value);

if(value.equals("notfound")){
		setBackground(Color.red);
		System.out.println(this.getText());}
	
return this;
}

private void setValue(Object value) {
	this.setText((String)value);
	
}

}
 

KrokoDiehl

Top Contributor
Erbe deinen Renderer besser vom DefaultTableCellRenderer, dann brauchst du in der getRenderer-Methode "nur" noch den Hintergrund ändern und behälst alle ürbigen Standardeigenschaften bei. Etwa so:
Java:
public class MyRenderer extends DefaultTableCellRenderer
{
    //...
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        Component comp = super.getTableCellRendererComponent(...);
        if (value == null) // oder wie auch immer du ungültige Werte prüfst
        {    
            comp.setBackground( Color.red );
        }
        return comp;
    }
}
 

java66

Aktives Mitglied
ja die werte bekomme ich ausgegeben das problem ist nur wenn ich auf setbackground mache setzt alle cellen hintergründe auf die selbe farbe und der wert ist weg :(
 

Michael...

Top Contributor
Würde Dir auch den Vorschlag von KrokoDiehl nahe legen. Da Du in Deinem Renderer in allen Fällen den Hintergrund aktiv setzen musst. Ausserdem fehlt in Deinem Renderer auch
Code:
setText(value.toString());
da die Zelle sonst leer bleibt;
Und
Code:
value.equals("notfound"))
müsste heissen
Code:
value.toString().equals("notfound"))
 

Balbes

Mitglied
ja die werte bekomme ich ausgegeben das problem ist nur wenn ich auf setbackground mache setzt alle cellen hintergründe auf die selbe farbe und der wert ist weg :(

würde auch sagen, was KrokoDiehl geschreben hat:

in der Methode public Component getTableCellRendererComponent....

Java:
Component comp = super.getTableCellRendererComponent(...);
        if (value == null) // oder wie auch immer du ungültige Werte prüfst
        {    
            comp.setBackground( Color.red );
        }
        return comp;

machen. Dann wird nur eine Zelle gefärbt und nicht die ganzen Zellen. Natürlich dann von DefaultTableCellRenderer erben
 

Marco13

Top Contributor
Das von KrokoDiehl gepostete ist an sich nicht ganz falsch. Das "Problem" ist, dass der DefaultTableCellRenderer bei "get..Component" nicht eine neue Component liefert, sondern immer die selbe (nämlich sich selbst - der DefaultTableCellRenderer IST ein JLabel). Das ist aber kein "Problem" oder "Fehler", sondern Absicht: Die zurückgegebene Component wird immer wieder (für ALLE Zellen) verwendet - wie eine Art "Stempel".

Es müßte also zumindest
Code:
        if (value == null) // oder wie auch immer du ungültige Werte prüfst
        {    
            comp.setBackground( Color.red );
        }
        [b]else
        {
            comp.setBackground( Color.WHITE); // oder so...
        }[/b]
heißen...
 

Michael...

Top Contributor
Java:
Component comp = super.getTableCellRendererComponent(...);
        if (value == null) // oder wie auch immer du ungültige Werte prüfst        {    
            comp.setBackground( Color.red );
        }
        return comp;
Beim erben von DefaultCellRenderer ist das erzeugen von
Code:
Component comp = super.getTableCellR...
nicht notwendig - und wenn dann sollte man comp global deklarieren und nicht in der Methode.
folgender Code ist völlig ausreichend:
Java:
super.getTableCellRendererComponent(...);
if (value==null)
    this.setBackground(Color.RED);
return this;
 

Marco13

Top Contributor
Das stimmt zwar (wie ich auch angedeutet habe) - aber wenn man irgendwann mal von einem anderen *TableCellRenderer erbt, oder der DefaultTableCellRenderer irgendwann mal nicht mehr von JLabel erbt, hat man ein Problem. Wenn man die Struktur
Code:
Component component = super.get...Component(...);
somehowModify(component);
return component;
verwendet, macht man weniger Annahmen und ist in gewissen Grenzen unabhängiger und flexibler als mit
Code:
super.get...Component(...);
somehowModify(this);
return this;

Ist vielleicht in den meisten Fällen nicht soooo wichtig, aber ... ... ich erwähn's halt mal :oops:
 

KrokoDiehl

Top Contributor
Stimmt stimmt, das hat mich auch schon oft verwirrt, dass man beim Ändern der Hintergrundfarbe auch alle Alternativen beachten muss. Man muss sogar auf die Selektion eingehen:
Java:
if ( wertIstUngueltig )
{
    if (isSelected)
        comp.setBackground( // Farbe wenn der Wert ungültig ist UND die Zelle selektiert ist
    else
        comp.setBackground( // Farbe wenn der Wert ungültig ist aber die Zelle NICHT selektiert ist 
}
else
{
    // Standardfarben der Tabelle
    if (isSelected)
        comp.setBackground( table.getSelectionBackground() );
    else
        comp.setBackground( table.getBackground() );
}
Ob man es nun so oder anders macht, jedenfalls gibt es diese vier möglichen Fälle.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Swing CellRenderer für einzelne Zellen? AWT, Swing, JavaFX & SWT 5
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
G Border der Komponente bei Table CellRenderer überschreiben AWT, Swing, JavaFX & SWT 0
Developer_X Java JTable - Combobox + Checkbox - Cellrenderer + Editor AWT, Swing, JavaFX & SWT 3
S Verständnisproblem mit CellRenderer AWT, Swing, JavaFX & SWT 1
M Swing Jtable CellRenderer Parameter uebergeben AWT, Swing, JavaFX & SWT 4
K Swing JList und veränderte CellRenderer AWT, Swing, JavaFX & SWT 8
G JComboBox mit CellRenderer (Auswahl) AWT, Swing, JavaFX & SWT 11
J JTable: Problem bei CellRenderer AWT, Swing, JavaFX & SWT 3
S Swing Zelle einer JTable hervorheben (ohne CellRenderer) AWT, Swing, JavaFX & SWT 3
Spin CellRenderer Probleme bei JList AWT, Swing, JavaFX & SWT 4
S Swing Jlist - CellRenderer/ Selektion AWT, Swing, JavaFX & SWT 2
B JTable CellRenderer AWT, Swing, JavaFX & SWT 5
D Swing JList, CellRenderer und Model AWT, Swing, JavaFX & SWT 6
C Wieso funktionert der CellRenderer nicht? AWT, Swing, JavaFX & SWT 2
hdi Swing JTable: Mein CellRenderer ist ein Performance-Killer? AWT, Swing, JavaFX & SWT 7
E Swing JTable mit CellRenderer AWT, Swing, JavaFX & SWT 7
J Swing JXTable, vom CellRenderer gerendertes Value holen. AWT, Swing, JavaFX & SWT 5
J JList CellRenderer Null-Layoutpanel AWT, Swing, JavaFX & SWT 4
? Tabelle formatieren - auch ohne CellRenderer? AWT, Swing, JavaFX & SWT 6
M CellEditor und CellRenderer für eigene Klasse AWT, Swing, JavaFX & SWT 4
H JTable und CellRenderer AWT, Swing, JavaFX & SWT 2
M CellRenderer in JTable AWT, Swing, JavaFX & SWT 11
D JList Cellrenderer fügt mehrfach ein AWT, Swing, JavaFX & SWT 2
G JTable, TableModel und CellRenderer AWT, Swing, JavaFX & SWT 3
K Verständnisfrage zum CellRenderer AWT, Swing, JavaFX & SWT 4
G [Problem] CellRenderer und ActionCommand AWT, Swing, JavaFX & SWT 5
K JTable - warum funktioniert mein CellRenderer nicht? AWT, Swing, JavaFX & SWT 9
G CellRenderer, der einige ImageIcons aneinanderreiht AWT, Swing, JavaFX & SWT 5
G JTable: Zellenhöhe mit neuem CellRenderer & Editor AWT, Swing, JavaFX & SWT 17
G CellRenderer funkt net AWT, Swing, JavaFX & SWT 5
T CellRenderer funzt net AWT, Swing, JavaFX & SWT 20
F JTable CellRenderer über boolean AWT, Swing, JavaFX & SWT 12
M Krieg keine CellRenderer Methode hin :( AWT, Swing, JavaFX & SWT 12
C JTable mit JPanel als CellRenderer AWT, Swing, JavaFX & SWT 2
G JTable CellRenderer-Problem AWT, Swing, JavaFX & SWT 4
A Mit JavaFX einzelne Zeilen in TableView farbig markieren AWT, Swing, JavaFX & SWT 5
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
J JavaFX TabPane / Wie füge ich einzelne items ? AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
S JavaFX TableView einzelne Zelle Layout zuweisen AWT, Swing, JavaFX & SWT 3
T AWT Grafik"Array" einzelne Elemente verschieben AWT, Swing, JavaFX & SWT 1
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
N jFreeChart einzelne Punkte anwählen und Formatieren AWT, Swing, JavaFX & SWT 0
M JavaFX TextArea einzelne Buchstaben färben AWT, Swing, JavaFX & SWT 3
T Swing Einzelne Teile eines Textes färben? AWT, Swing, JavaFX & SWT 10
M Einzelne Ordner im JFileChooser ausgrauen? AWT, Swing, JavaFX & SWT 4
D Swing Mit TableCellRenderer einzelne Zellen markieren AWT, Swing, JavaFX & SWT 3
R einzelne Zeichen in jTable einlesen AWT, Swing, JavaFX & SWT 10
M Swing Einzelne Fenster schließen AWT, Swing, JavaFX & SWT 2
V JTable: Zugriff auf einzelne Zellen AWT, Swing, JavaFX & SWT 4
K Swing CellEditor für einzelne Zellen AWT, Swing, JavaFX & SWT 2
K Swing JTable Editierfunktion für einzelne Zellen ausschalten AWT, Swing, JavaFX & SWT 3
S Einzelne JComboBox in JTable austauschen AWT, Swing, JavaFX & SWT 4
F Einzelne TreeNode an einem JTree editierbar machen AWT, Swing, JavaFX & SWT 3
C JTree Einzelne Objekte färben AWT, Swing, JavaFX & SWT 4
C Spielfeld Gitter - Einzelne Zellen verändern AWT, Swing, JavaFX & SWT 18
B Swing Einzelne Zelle in JTable soll NICHT auswählbar sein AWT, Swing, JavaFX & SWT 9
M JTable einzelne Zeilen färben AWT, Swing, JavaFX & SWT 2
A Swing JTree Editable einzelne Nodes editierbar machen! AWT, Swing, JavaFX & SWT 2
T einzelne Zelle einer JTable auswählen und Hintergrundfarbe ändern AWT, Swing, JavaFX & SWT 2
T JTable - Einzelne Spalte nicht sortieren? AWT, Swing, JavaFX & SWT 2
R JTable einzelne Zellen selektieren AWT, Swing, JavaFX & SWT 7
H Einzelne Pixel auf Transparenz überprüfen? AWT, Swing, JavaFX & SWT 3
J JTable: Einzelne Zelle selektieren AWT, Swing, JavaFX & SWT 6
X Einzelne Border setzen AWT, Swing, JavaFX & SWT 2
F png-Datei erstellen und einzelne Pixel schreiben AWT, Swing, JavaFX & SWT 2
J MVC- einzelne Sichten auf einer Hauptsicht anzeigen AWT, Swing, JavaFX & SWT 3
S Einzelne Frame Fenster schließen AWT, Swing, JavaFX & SWT 2
S Einzelne Frame Fenster schließen AWT, Swing, JavaFX & SWT 2
P JTextArea - einzelne Zeile löschen bzw einfügn AWT, Swing, JavaFX & SWT 2
G Einzelne Objekte neu zeichnen AWT, Swing, JavaFX & SWT 8
B einzelne Zellen scrollbar machen innerhalb einer Tabelle AWT, Swing, JavaFX & SWT 3
E JTable einzelne reihe editierbar machen AWT, Swing, JavaFX & SWT 2
I einzelne Zellen bei JTable markieren AWT, Swing, JavaFX & SWT 3
C JTable: Einzelne Spalten nicht editierbar machen AWT, Swing, JavaFX & SWT 2
S Mehrere Tabellen Zellen gleichzeitig färben AWT, Swing, JavaFX & SWT 5
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
I JavaFX Zellen in Tableview editieren AWT, Swing, JavaFX & SWT 0
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
B JavaFX TableView-Zellen sollen automatisch so groß wie der größte Inhalt sein AWT, Swing, JavaFX & SWT 6
J Tableview - kann man mit Enter die Zellen wechseln AWT, Swing, JavaFX & SWT 1
S JavaFX GridPane Zellen Seitenverhätnis passend ändern mit der Stage AWT, Swing, JavaFX & SWT 0
E JavaFX TableView mit Zeilenumbruch in Zellen AWT, Swing, JavaFX & SWT 5
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
J Zellen in JavaFx einfärben funktioniert nicht AWT, Swing, JavaFX & SWT 1
A Swing JTable Umgang mit Zellen AWT, Swing, JavaFX & SWT 2
S Swing Zeilenumbruch in JTable Zellen AWT, Swing, JavaFX & SWT 3
M Swing Jtable zellen zentrieren AWT, Swing, JavaFX & SWT 4
J CellEditorListener wird für ALLE Zellen ausgeführt AWT, Swing, JavaFX & SWT 2
M JTable Zeilen und Zellen einfärben AWT, Swing, JavaFX & SWT 11
GUI-Programmer JTable - zentrierte Zellen AWT, Swing, JavaFX & SWT 2
B JTable Selektion von Zellen AWT, Swing, JavaFX & SWT 3
GianaSisters Swing JTable Zellen intelligenter Zeilenumbruch AWT, Swing, JavaFX & SWT 4
E Swing zellen fixen AWT, Swing, JavaFX & SWT 7
X JTable Zellen nicht editierbar AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben