Farbe einer einzelnen Zeile einer JTable ändern

Status
Nicht offen für weitere Antworten.

NdaG

Mitglied
Hi,

ich habe ein Problem mit einer JTable. Ich habe in jeder Zeile verschiedene Objekte und frage vor dem Speichern dieser Objekte in der Datenbank ab ob die Eingaben richtig sind. Falls diese es sind wird in der Datenbank gespeichert. Falls diese es jedoch nicht sind, so erscheint ein PopUp mit einer Fehlermeldung auf dem Bildschirm. Soweit so gut das funktioniert auch alles nun möchte ich aber dem Nutzer farblich kennzeichnen in welcher Zeile er Eingabefehler gemacht hat und genau da liegt mein Problem. Da es sich hier um verschiedene Objekte handelt die selbst keine setColor Funktion haben und leider auch keine Components sind finde ich einfach keine Lösung um die jeweilige Zeile farbig zu gestalten.

Danke im Voraus
 
Hallo,

Du kannst deiner JTable einfach einen eigenen TableCellRenderer verpassen.
Erstelle einfach eine neue Klasse, lasse sie von DefaultTableCellRenderer erben und überschreibe die Methode
[highlight=java]public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column)[/highlight]
Mit setBackground() bzw. mit setForeground() kannst du dann die Farbe der Zeile ändern.
Wie du siehst kannst du dort auch auf dein Objekt selbst zugreifen. Hinterlege in deinen Objektklassen einfach ein Flag, das du dann auf true setzt falls ein Fehler gemacht wurde.
In der getTableCellRendererComponent() Methode frägst du dieses Flag ab und änderst die Farbe entsprechend.

Vergiss nicht mit [highlight=java]JTable.setDefaultRenderer(Class columnClass, TableCellRenderer renderer)[/highlight] deiner JTable diesen Renderer auch zuzuweisen.

Dein TableCellRenderer könnte z.B. so aussehen :
(sehr grob - hoffe ohne Fehler ( : )

[highlight=java] public class MyTableCellRenderer extends DefaultTableCellRenderer {

@override
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column)
{

DeinObjekt obj = (DeinObjekt)value;


if(obj.getFlag()){

setBackground(Color.RED);

}

return this;

}


}


[/highlight]

EDIT: Da war wohl einer schneller ( :
 
Zuletzt bearbeitet:

André Uhres

Top Contributor
Da es sich hier um verschiedene Objekte handelt die selbst keine setColor Funktion haben und leider auch keine Components sind finde ich einfach keine Lösung um die jeweilige Zeile farbig zu gestalten.
Was spricht dagegen, daß deine Objekte noch eine Schnittstelle "Colored" mit den Methoden "setColor" und "getColor" implementieren?
In JTable#prepareRenderer haben wir übrigens Zugriff auf sämtliche Renderer der JTable und können dort problemlos ganze Zeilen einfärben (Component#setBackground(Color c)).
 

mephistho

Mitglied
Hi,

ich hab ein Problem mit einem CustomTableCellRenderer. Es geht um Schiffeversenken. Ich möchte je nach Wert der Zelle, eine Farbe darstellen lassen - später Schiffe zeichnen.

Ich setze den DefaultRenderer meiner Tabelle auf meinen selbsterstellten:
Java:
jEigenesFeld.setDefaultRenderer( Object.class , cellRenderer);

über meine Methode platziereSchiff(int startX, int startY, int endX, int endY) platziere ich die Schiffe, indem ich jeweils den Wert "s" eintragen lasse.

Java:
    private void platziereSchiff(int startX, int startY, int endX, int endY) {
        if(startY == endY) {
            if(endX > startX) {
                for(int i = startX; i <= endX; i++) {
                    jEigenesFeld.setValueAt("s", startY, i);
                }
            }
            else if(endX < startX) {
                 for(int i = startX; i >= endX; i--) {
                    jEigenesFeld.setValueAt("s", startY, i);
                }
            }
        }
        else if(startX == endX) {
            if(endY > startY) {
                for(int i = startY; i <= endY; i++) {
                    jEigenesFeld.setValueAt("s", i, startX);
                }
            }
            else if(endY < startY) {
                 for(int i = startY; i >= endY; i--) {
                    jEigenesFeld.setValueAt("s", i, startX);
                }
            }
        }
    }

Und eiiigentlich sollte doch der folgende CustomTableCellRenderer nur die Zellen blau einfärben, in denen ein "s" steht, oder sehe ich das falsch?
Java:
public class CustomTableCellRenderer extends DefaultTableCellRenderer
{
    @Override
    public Component getTableCellRendererComponent
       (JTable table, Object value, boolean isSelected,
       boolean hasFocus, int row, int column)
    {
        Component cell = super.getTableCellRendererComponent
           (table, value, isSelected, hasFocus, row, column);
            try {
                if( value instanceof String ) {
                    
                    if(value.equals("s")) {
                        cell.setBackground( Color.BLUE );
                        //cell.setForeground(Color.BLUE);
                    }
                    else {
                        cell.setBackground( Color.WHITE );
                    }
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        return cell;
    }
}

Wie es tatsächlich läuft, sieht man hoffentlich auf den Screenshots.

Ich weiß nicht, was ich falsch mache. Vielleicht kann mir hier jemand weiterhelfen.

Danke & Gruß,
meph
 

Anhänge

  • 1.JPG
    1.JPG
    37,2 KB · Aufrufe: 75
  • 2.JPG
    2.JPG
    38,1 KB · Aufrufe: 85

Michael...

Top Contributor
Java:
public class CustomTableCellRenderer extends DefaultTableCellRenderer
{
    @Override
    public Component getTableCellRendererComponent
       (JTable table, Object value, boolean isSelected,
       boolean hasFocus, int row, int column)
    {
        Component cell = super.getTableCellRendererComponent
           (table, value, isSelected, hasFocus, row, column);
            try {
               if( value instanceof String ) {
Vermutlich liegt's an Zeile 11. Was soll passieren wenn value kein String ist. In dem Fall sollte ebenfalls ein Zustand definiert werden.
 

mephistho

Mitglied
BOAH! Danke! :) Hätt ich auch selber mal probieren können.

Aber ist das nicht ein bisschen unsinnig? Er soll doch nur in den If-Block gehen, wenn eben ein String vorliegt. Wieso kann er dann überhaupt in irgendeinem anderen Fall auf dieselbe Idee kommen?
 

Michael...

Top Contributor
Bin jetzt auch nicht der Experte darin.

Es liegt -glaube ich - an der Art der Tabellendarstellung. Für die Darstellung der Zellen wird die Abbildung einer Komponente genutzt (die der Rendererkomponente). D.h. pro Renderer exisitiert nur eine Komponente und diese wird entsprechend der Vorgaben im TableCellRenderer manipuliert. In deinem Fall ist der Hintergrund der Komponente irgendwann mal auf blau gesetzt worden. Bei den nächsten Zellen war value vermutlich null also instanceof String ergab false und an der Hintergrundfarbe wurde nichts geändert, also die blaue Hintergrundfarbe beibehalten.
In welcher Weise und Reihenfolge die Zellen einer Tabelle abgearbeitet werden ist mir allerdings noch unklar.
 

André Uhres

Top Contributor
In welcher Weise und Reihenfolge die Zellen einer Tabelle abgearbeitet werden ist mir allerdings noch unklar.
Wie das geschieht, ist für den Entwickler wohl unerheblich. Wir können uns den Renderer als konfigurierbaren Stempel vorstellen. Wenn ein bestimmtes Attribut, wie z.B. "background", zellenabhängig gesetzt werden soll, dann müssen wir sicherstellen, daß der "Stempel" auch immer für jeden einzelnen Fall passend konfiguriert wird. Meistens setzt man zuerst einen "default"-Wert, etwa cell.setBackground(table.getBackground()), ehe man die Abfragen für die speziellen Fälle macht.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
M Ausgabe der HSL oder RGB Zusammensetzung einer Farbe (JColorChooser AWT, Swing, JavaFX & SWT 1
D JComboBox jedes Item mit einer anderen Farbe AWT, Swing, JavaFX & SWT 10
P 2D-Grafik Neue Farbe für einen Teilbereich einer Linie? AWT, Swing, JavaFX & SWT 8
M Combobox soll Farbe einer Komponente setzen AWT, Swing, JavaFX & SWT 2
C Welche Farbe hat die Auswahl in einer JTable? AWT, Swing, JavaFX & SWT 2
O Hgr- Farbe einer JTable ändert sich nicht AWT, Swing, JavaFX & SWT 11
L wie setze ich die Farbe des Pfeils in einer JComboBox? AWT, Swing, JavaFX & SWT 5
G Farbe der Markierung einer Componente ändern AWT, Swing, JavaFX & SWT 2
N Die Zeile einer JTable verändert beim klicken ihre Farbe? AWT, Swing, JavaFX & SWT 7
D Farbe einer Grafik über den Cursor abfragen AWT, Swing, JavaFX & SWT 6
G Farbe einer JTable-Zeile von "Außen" ändern AWT, Swing, JavaFX & SWT 2
S Farbe einer Zelle in JTable ändern AWT, Swing, JavaFX & SWT 13
M Farbe der Umrandung einer ausgwählten Zeile ändern (JTable) AWT, Swing, JavaFX & SWT 3
S JTable - farbe einer cell/row ändern, Hilfe please AWT, Swing, JavaFX & SWT 2
H Farbe einer Tabellenspalte ändern AWT, Swing, JavaFX & SWT 3
G JTable! Beim anklicken einer Zeile soll sich Farbe ändern! AWT, Swing, JavaFX & SWT 2
H JavaFX PixelWriter.setColor setzt Farbe nicht AWT, Swing, JavaFX & SWT 2
F Progressbar Farbe AWT, Swing, JavaFX & SWT 6
jojoge Wie erstelle ich runde Buttons mit Farbe? AWT, Swing, JavaFX & SWT 1
Kotelettklopfer Frame ändert Farbe nicht AWT, Swing, JavaFX & SWT 12
Hatsi09 GUI Input Farbe ändern AWT, Swing, JavaFX & SWT 0
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
F Drag&Drop mit Transparenter Farbe bei PNG AWT, Swing, JavaFX & SWT 0
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
H JFreeChart BarDiagramm Balken der gleichen Serie unterschiedliche Farbe zuordnen AWT, Swing, JavaFX & SWT 2
cool_brivk24 Swing Button Farbe ändern AWT, Swing, JavaFX & SWT 2
R Farbe zu einem Eckpunkt generieren AWT, Swing, JavaFX & SWT 2
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
W Farbe des Fensters AWT, Swing, JavaFX & SWT 2
krgewb Swing JTree - Farbe von nodes ändern AWT, Swing, JavaFX & SWT 4
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
Z Möglichkeit mit Listerners die Farbe meiner Objekte zu ändern AWT, Swing, JavaFX & SWT 15
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
C Arrow Farbe bei JComboBox AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
V LookAndFeel JSpinner Hintergrund Farbe mit Nimbus LaF AWT, Swing, JavaFX & SWT 0
X mouseover verändert ungewollt die farbe AWT, Swing, JavaFX & SWT 4
D Swing Farbe aus Pixel vom JFrame auslesen AWT, Swing, JavaFX & SWT 17
T Swing JScrollPane Farbe der Scrollbar AWT, Swing, JavaFX & SWT 3
J Swing Farbe wählen ohne JColorChooser 2 AWT, Swing, JavaFX & SWT 23
S Farbe von JButton ändern AWT, Swing, JavaFX & SWT 5
T Jbutton Click farbe ändern AWT, Swing, JavaFX & SWT 4
C AWT Wie setze ich die Farbe "leuchtetgrün"? AWT, Swing, JavaFX & SWT 4
B Swing Button Farbe AWT, Swing, JavaFX & SWT 3
M Hover-Farbe über Hintergrundfarbe legen AWT, Swing, JavaFX & SWT 3
N Farbe abziehen AWT, Swing, JavaFX & SWT 3
R Farbe von Buttons stimmt nicht AWT, Swing, JavaFX & SWT 2
B Cursor Farbe ändern AWT, Swing, JavaFX & SWT 6
Y LookAndFeel JTabbedPane: Tab-Farbe mit Nimbus setzen AWT, Swing, JavaFX & SWT 3
T DefaultTableCellRenderer Farbe bestimmter Zelle ändern AWT, Swing, JavaFX & SWT 2
P JLabel Farbe/Bild ändern aus MouseListener heraus AWT, Swing, JavaFX & SWT 3
K 2D-Grafik Fehler beim Farbe auslesen AWT, Swing, JavaFX & SWT 3
T JTable Zellen Farbe AWT, Swing, JavaFX & SWT 13
D JTabel: Überschrift, Abstand zwischen Tabellen, Spalten-Farbe ändern AWT, Swing, JavaFX & SWT 2
D Swing JTable, Zellen-Farbe über Koordinaten ändern AWT, Swing, JavaFX & SWT 9
N SWT-Widgets in Farbe AWT, Swing, JavaFX & SWT 21
F JButton Text-Farbe bei Disabled AWT, Swing, JavaFX & SWT 2
C Farbe eines ToolTipTextes eines Buttons AWT, Swing, JavaFX & SWT 4
D JTabbedPane - Farbe ändern im Bereich hinter den Reitern AWT, Swing, JavaFX & SWT 2
Q 3D-Grafik Cube Farbe setzen zur Laufzeit. AWT, Swing, JavaFX & SWT 10
I Schrift und Farbe formatieren, und zwar pro Linie... AWT, Swing, JavaFX & SWT 4
A SWT - Farbe von Text auf Label ändern AWT, Swing, JavaFX & SWT 2
N Swing JEditorPane mit Farbe und Font AWT, Swing, JavaFX & SWT 2
chik Button beschriften und Farbe zufällig anordnen AWT, Swing, JavaFX & SWT 2
S JSlider Track Breite und Farbe AWT, Swing, JavaFX & SWT 2
D SWT TabItem Farbe der Schrift ändern AWT, Swing, JavaFX & SWT 3
L JFreeChart Farbe von Balken AWT, Swing, JavaFX & SWT 5
O AWT Zeichne mit eigener Farbe AWT, Swing, JavaFX & SWT 3
S JSplitPane ändert Farbe nicht AWT, Swing, JavaFX & SWT 4
V JComboBox - Farbe in der Auswalliste AWT, Swing, JavaFX & SWT 7
GambaJo Farbe eines JFrames AWT, Swing, JavaFX & SWT 2
K Icon auf JButton mit Wechsel der Farbe AWT, Swing, JavaFX & SWT 2
D Farbe bei einem JButton wechseln AWT, Swing, JavaFX & SWT 4
L Farbe des Auswahlrechtecks bei selektierter Tabellenzeile AWT, Swing, JavaFX & SWT 9
M JComboBox Selected-Background Farbe AWT, Swing, JavaFX & SWT 5
K Farbe eines Pixels in einem Bild AWT, Swing, JavaFX & SWT 7
I JLabel Farbe AWT, Swing, JavaFX & SWT 1
G JOptionPane mit andere Farbe AWT, Swing, JavaFX & SWT 8
G JFrame und Farbe AWT, Swing, JavaFX & SWT 4
M Farbe eines strings in JTextArea AWT, Swing, JavaFX & SWT 2
J JTree - Farbe von nodes ändern AWT, Swing, JavaFX & SWT 2
F Farbe für den Hintergrund eine BorderLayout-Teils AWT, Swing, JavaFX & SWT 5
G Bild mit transparente farbe für den IE6 AWT, Swing, JavaFX & SWT 5
G Farbe ändern bei Klick auf einen Kreis AWT, Swing, JavaFX & SWT 5
B transparente Farbe AWT, Swing, JavaFX & SWT 3
H JButton Farbe verändern AWT, Swing, JavaFX & SWT 4
G Bild a auf Bild b, bestimmte Farbe (zb Weiß) durchsichtig AWT, Swing, JavaFX & SWT 7
G JTable Zeile mit Farbe füllen AWT, Swing, JavaFX & SWT 2
I Farbe aus einem Icon herauslesen AWT, Swing, JavaFX & SWT 5
A JProgressBar: Farbe im Windows Look&Feel ändern. AWT, Swing, JavaFX & SWT 1
E Spalten Farbe ändern AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben