Frage zu eigenem TableCellRenderer

CConraths

Aktives Mitglied
Hallo Forum
ich möchte Zellen in einem JTable unter bestimmten Bedingungen farbig hinterlegen.
Ich habe dazu diese Klasse angelegt
Java:
public class MyTableCellRenderer extends JLabel implements TableCellRenderer
{
    private static final long serialVersionUID = 1L;

public MyTableCellRenderer()
   {
       super.setOpaque(true);
   }
    
   @Override
   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
       boolean hasFocus, int row, int column)
   {
       String string = (String) value;
       if(string.equals("Summe Tag")) {
           super.setBackground(Color.GREEN);
       }
       else if(string.equals("Summe Monat")) {
           super.setBackground(Color.BLUE);
       }
       else  {
           super.setBackground(Color.WHITE);
       }
       return this;
   }   
}

Mein Problem ist das der Text der in der Zelle stand verschwunden ist. Das mit den Farben klappt.
Kann mir da bitte jemand helfen.

Viele Grüße
Christian
 

mihe7

Top Contributor
Naja, Du musst den Text des JLabels natürlich auch setzen :)
Java:
setText(string);
 

CConraths

Aktives Mitglied
nun noch eine Frage zu diesem Thema
bei der Lösung der Aufgabe wenn ich aufgrund der Bedingung in der ersten Zelle die x-te Zelle farbig hervorheben will habe ich keinen Ansatz gefunden.
Wie mache ich denn sowas ???
Danke für jede Hilfe.
Christian
 

mihe7

Top Contributor
Java:
Object firstCellValue = table.getModel().getValueAt(row, 0);
boolean inDailyTotalLine = "Summe Tag".equals(firstCellValue);

if (inDailyTotalLine) {
     setBackground(Color.GREEN);
     if (col == 1) {
          setFont(boldFont);
     }
}
...
Du meinst so etwas in der Richtung?
 

CConraths

Aktives Mitglied
Hallo mihe7
in deinem Beispiel nimmst du column = 1 als Abfrage
getTableCellRendererComponent wird aber bei mir immer nur mit column 0 aufgerufen
Wenn ich column 12 farbig setzen will habe ich doch diese gar nicht im Zugriff
 

CConraths

Aktives Mitglied
eieiei
für dich ist das Tagesgeschäft aber ich bin nicht so tief drinnen in der Objektorientierung.
Ich versuche das nachzuvollziehen also
der eigene TableCellRenderer gibt mir die Möglichkeit die Methode getTableCellRendererComponent zu überschreiben.

ich rufe ihn mit den Parametern "Table,value,isSelected,hasFocus,row,column" auf.

Ich habe einen Table mit 16 Spalten. Davon möchte ich in der Zelle (0,11) (1,11) (2,11).... die Farbe setzen wenn in (0,0), (1,0),(2,0) ein bestimmter Wert steht
Java:
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
   {
      
       Object firstCellValue = table.getModel().getValueAt(row, 0);       
       String string = (String) firstCellValue;
       if(string.equals("Summe Tag")) {
           super.setBackground(Color.GREEN);
           super.setText(string);
       }
       else if(string.equals("Summe Monat")) {
           super.setBackground(Color.CYAN);
           super.setText(string);
       }
       else  {
           super.setBackground(Color.WHITE);
           super.setText(string);
       }
       super.setText(string);
       return this;
   }

aufrufen tue ich wie folgt

Code:
mtr.getTableCellRendererComponent(alle_einsatzverfuegungen_table, alle_einsatzverfuegungen_table.getColumnModel().getColumn(11), false, false, 0, 11);

Das hier setzt die Farbe für die Zellen (0,0), (1,0),(2,0)


was muss ich parameterseits übergeben um die 11 te Spalte mit einer Farbe zu überschreiben.

wer wie was wiso weshalb warum wer nicht fragt bleibt dumm

:)


Danke für jede Hilfestellung.


 

mihe7

Top Contributor
ich rufe ihn mit den Parametern "Table,value,isSelected,hasFocus,row,column" auf.
Nein, JTable ruft ihn auf :) Du musst dem ColumnModel der JTable nur sagen, für welche Spalte welcher Renderer verwendet werden soll. Ich muss jetzt weg, aber vielleicht kann ich Dir heute Nacht schnell ein Beispiel reinklopfen - wenn ich drandenke.
 

mihe7

Top Contributor
Beispiel:
Java:
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class Test {

    static class CellColorDecorator implements TableCellRenderer {
        private final TableCellRenderer delegate;
       
        public CellColorDecorator(TableCellRenderer delegate) {
            this.delegate = delegate;
        }
       
        public static void install(JTable table) {
            TableColumnModel columns = table.getColumnModel();
            for (int i = 0, n = columns.getColumnCount(); i < n; i++) {
                TableColumn column = columns.getColumn(i);
                TableCellRenderer delegate = column.getCellRenderer();
                if (delegate == null) {
                    delegate = new DefaultTableCellRenderer();
                }

                column.setCellRenderer(new CellColorDecorator(delegate));
            }
        }
       
        @Override
        public Component getTableCellRendererComponent(JTable table,
                Object value, boolean isSelected, boolean hasFocus,
                int row, int column) {
            Component comp = delegate.getTableCellRendererComponent(table,
                    value, isSelected, hasFocus, row, column);
                   
            Object firstCellValue = table.getModel().getValueAt(row, 0);
            boolean inDailyTotalLine = "Summe Tag".equals(firstCellValue);
           
            if (!isSelected && !hasFocus) {
                if (inDailyTotalLine) {
                    comp.setBackground(Color.GREEN);
                } else {
                    comp.setBackground(table.getBackground());
                }
            }

            return comp;
        }
    }

    public void run() {
        Object[][] data = {
            {"Anna", 14},
            {"Hans", 12},
            {"Summe Tag", 26},
            {"Anna", 10},
            {"Hans", 8},
            {"Summe Tag", 18}
        };
       
        JTable table = new JTable(data, new Object[]{"Wer","Was"});       
       
        CellColorDecorator.install(table);
   
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(new JScrollPane(table));
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
 

CConraths

Aktives Mitglied
Hallo mihe7
vielen Dank für dein Beispiel welches standalone auch das leistet was ich machen will.

Ich möchte es aber nicht als eigene Klasse verwenden sondern in mein Projekt includieren.
Und hier scheitere ich erneut.
Java:
alle_einsatzverfuegungen_table = new JTable(alle_einsatzverfuegungen_table_model);
CellColorDecorator.install(alle_einsatzverfuegungen_table);

so rufe ich die install-methode auf
und das habe ich implementiert
Code:
    static class CellColorDecorator implements TableCellRenderer {
        private final TableCellRenderer delegate;
      
        public CellColorDecorator(TableCellRenderer delegate) {
            this.delegate = delegate;
        }
      
        public static void install(JTable table) {
            TableColumnModel columns = table.getColumnModel();
            for (int i = 0, n = columns.getColumnCount(); i < n; i++) {
                TableColumn column = columns.getColumn(i);
                TableCellRenderer delegate = column.getCellRenderer();
                if (delegate == null) {
                    delegate = new DefaultTableCellRenderer();
                }

                column.setCellRenderer(new CellColorDecorator(delegate));
            }
        }
      
        @Override
        public Component getTableCellRendererComponent(JTable table,
                Object value, boolean isSelected, boolean hasFocus,
                int row, int column) {
            Component comp = delegate.getTableCellRendererComponent(table,
                    value, isSelected, hasFocus, row, column);
                  
            Object firstCellValue = table.getModel().getValueAt(row, 0);
            boolean inDailyTotalLine = "Summe Tag".equals(firstCellValue);
          
            if (!isSelected && !hasFocus) {
                if (inDailyTotalLine) {
                    comp.setBackground(Color.GREEN);
                } else {
                    comp.setBackground(table.getBackground());
                }
            }

            return comp;
        }
    }

getTableCellRendererComponent wird aber immer nur mit dem ersten Column jeder Zeile aufgerufen.
Das wird dann auch grün unterlegt.
Wo muss ich denn eingreifen, damit alle Spalten der Reihe gerendert werden ???

Da steh ich auf dem Schlauch
Danke für jede Hilfe
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
H Frage regex greater than less than Allgemeine Java-Themen 7
berserkerdq2 Frage zu IntelliJ und JavaFX Allgemeine Java-Themen 1
W Timer Konzept-Frage Allgemeine Java-Themen 16
T Eine Frage des Designs Allgemeine Java-Themen 2
C Programmvorstellung & Frage zum Thema Geschäftsform Allgemeine Java-Themen 51
J Frage zu System.getproperties. Allgemeine Java-Themen 60
molat100 wie kann man die Frage beantworten Allgemeine Java-Themen 1
pkm Frage zur Präzision von Calendar.WEEK_OF_YEAR Allgemeine Java-Themen 12
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
pkm Frage nach eventuellem syntaktischen Zucker bei der Konkatenation von ArrayLists Allgemeine Java-Themen 4
M Frage-Antwortspiel wie Wer wird Millionär Allgemeine Java-Themen 1
F Frage zu System.in Allgemeine Java-Themen 3
marcooooo Frage zum Beispiel im Anhang Allgemeine Java-Themen 16
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
B For-Loop Frage Allgemeine Java-Themen 21
L Java frage Allgemeine Java-Themen 3
bueseb84 Frage zu Mock und UpperBound Allgemeine Java-Themen 2
M Frage zum Konstruktor Allgemeine Java-Themen 2
W Best Practice Frage zur Umsetzung MVC Allgemeine Java-Themen 9
P String-Verschlüsselung - Frage zur Sicherheit Allgemeine Java-Themen 21
B Frage zu Unit-Tests Allgemeine Java-Themen 6
T Allgemeine Frage: GUI für 3D-Visualisierung Allgemeine Java-Themen 5
R Allgemeine Frage zu RMI bei MVC Allgemeine Java-Themen 2
O Frage zum Runtimeverhalten von Java ... Allgemeine Java-Themen 2
H Rundreise frage (Algorithmus) Allgemeine Java-Themen 18
B Generelle Frage bei einer Webanwendung / Reduzierung von DB Abfragen Allgemeine Java-Themen 1
D Frage zu Vererbung Allgemeine Java-Themen 5
J Frage zu regulärem Ausdruck Allgemeine Java-Themen 2
M Allgemeine Frage: Wie lernt man Java / Programmieren von Grund auf? Allgemeine Java-Themen 7
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
S Frage zur JLS Allgemeine Java-Themen 0
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
A Methoden Allgemeine Java Frage Allgemeine Java-Themen 3
E String Frage Allgemeine Java-Themen 9
I bin neu bei GitHub, Frage zur Sicherheit Allgemeine Java-Themen 14
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
C KeyListener Frage Allgemeine Java-Themen 3
T Frage zu UML in Java programmieren Allgemeine Java-Themen 1
R Konstanten initialisieren - FRAGE Allgemeine Java-Themen 3
MTJ004 FTP Frage zu FTP Speicherung Java-Android-FTP Allgemeine Java-Themen 5
J Frage zum Entwurf / json-Datenmodell Allgemeine Java-Themen 8
A Frage zu meinem Code Allgemeine Java-Themen 2
RalleYTN Classpath Nur ne kleine Frage zur MANIFEST.MF Allgemeine Java-Themen 4
T Frage zu Access Modifiers Allgemeine Java-Themen 6
W Input/Output Frage zu pdfbox und FileUtils Allgemeine Java-Themen 2
O Frage zur Implementierungsweise Allgemeine Java-Themen 4
B Frage zu Bitshift Allgemeine Java-Themen 3
J Java Zufallsgenerator (6 aus 49) Frage Allgemeine Java-Themen 7
L Frage zu RIA und GWT Allgemeine Java-Themen 0
P Concurrency Frage Allgemeine Java-Themen 8
M Frage zu Enumerations Allgemeine Java-Themen 2
F Unlimited Strength Policy. Frage Verbreitung der Anwendung Allgemeine Java-Themen 1
F Frage zur Library JTS Allgemeine Java-Themen 5
S Java Design Frage Allgemeine Java-Themen 10
E Reflection? Frage Allgemeine Java-Themen 4
C FileInputStream frage Allgemeine Java-Themen 6
G Polymorphie Programmdesign Frage Allgemeine Java-Themen 20
Uzi21 Frage zu NetBeans ( Console) Allgemeine Java-Themen 11
D Classpath Frage zum Java Resource Loading Allgemeine Java-Themen 2
G Frage zu JPA Allgemeine Java-Themen 1
S Methoden Frage Allgemeine Java-Themen 2
P MVC - Frage zu Model Allgemeine Java-Themen 4
K Frage zu Locks Allgemeine Java-Themen 1
S Frage zu abstract Allgemeine Java-Themen 5
M ArrayList<String> Frage Allgemeine Java-Themen 7
M OOP Design Frage Allgemeine Java-Themen 2
N Frage zur while-Schleife Allgemeine Java-Themen 18
T Best Practice Auslesen von Zeichenketten (Frage, Antworten, usw) Allgemeine Java-Themen 4
C Eine Frage zur Bearbeitungszeit Allgemeine Java-Themen 8
H Frage wegen Heap-Speicher Allgemeine Java-Themen 2
T Garbage Collection Frage Allgemeine Java-Themen 15
P Kurze Frage: aus einer File die Zeilenanzahl auslesen Allgemeine Java-Themen 9
D Frage zu Java und Umlauten / charsets Allgemeine Java-Themen 2
B Frage zu Java und OpenGL? Allgemeine Java-Themen 3
Q Kapselung Allgemeine Design- Frage Allgemeine Java-Themen 8
A eine test thread.join() frage Allgemeine Java-Themen 2
DStrohma LayoutManager Frage zum GridBagLayout Allgemeine Java-Themen 4
F Frage zu Regex möglich Allgemeine Java-Themen 4
H XML-File mit Java erzeugt Frage Allgemeine Java-Themen 10
D Frage und Antwort Programm, Problem bei Methodenaufruf Allgemeine Java-Themen 3
J NetBeans Frage bezüglich der Scanner-Klasse Allgemeine Java-Themen 6
H Java Vector Frage Allgemeine Java-Themen 9
W Frage... Allgemeine Java-Themen 29
R Frage zur topologischen Sortierung Allgemeine Java-Themen 2
H Frage zu weka.core.Instance Allgemeine Java-Themen 3
Y Kleine Frage zu String.split Allgemeine Java-Themen 3
T Frage zu Klassendesing Allgemeine Java-Themen 3
W Frage zu Refactoring statischer Methoden Allgemeine Java-Themen 4
C Eclipse Wichtige frage Allgemeine Java-Themen 5
H Frage zu java.weka.core.Instances Allgemeine Java-Themen 3
S Frage zu Format Modifiers in Log4j Allgemeine Java-Themen 11
H Frage zu clone() Allgemeine Java-Themen 5
4 Simple(?) Frage zu Threads Allgemeine Java-Themen 14
H2SO3- SCJP Chapter 3 Frage 10. Falsche Antwort? Allgemeine Java-Themen 15
H Frage sinnvolle Datenspeicherung und -verarbeitung Allgemeine Java-Themen 3
EnHancEd[] kurze enum-Frage Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben