Problem mit eigenem ColoredRenderer

jorgeHX

Erfahrenes Mitglied
Hallo folks,
ich habe ein kleines Problem mit meinem eigenen ColoredRenderer

Code:
table1_tb.setDefaultRenderer(Object.class,
                                     new ColoredRenderer(table1_tm));


Code:
  // Cell Renderer
//******************************************************************************
   class ColoredRenderer
       extends JButton implements TableCellRenderer {

     private Color lightGreen = new Color(155, 230, 200);
     private Color lightRed = new Color(255, 175, 157);

     TableModel tablemodel;

     public ColoredRenderer(TableModel tablemodel) {
       this.tablemodel = tablemodel;
     }

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

       // Label erzeugen
       JLabel label = new JLabel( (String) value);
       label.setOpaque(true);
       Border b = BorderFactory.createEmptyBorder(1, 1, 1, 1);
       label.setBorder(b);
       label.setFont(Colors.font);

       if (column == 0) {
         label.setHorizontalAlignment(SwingConstants.LEFT);
       }
       else {
         label.setHorizontalAlignment(SwingConstants.CENTER);
         if (column == 1 || column == 4 || column == 7 || column == 10 ||
             column == 13
             || column == 16 || column == 19 || column == 22) {
           label.setBackground(Colors.LIGHT_BLUE);
         }
         else if (column == 2 || column == 5 || column == 8 ||
                  column == 11 || column == 14
                  || column == 17 || column == 20 || column == 23) {
           label.setBackground(lightGreen);
         }
         else if (column == 3 || column == 6 || column == 9 ||
                  column == 12 || column == 15
                  || column == 18 || column == 21 || column == 24) {
           label.setBackground(lightRed);
         }
       }
       table.setGridColor(Color.BLACK);

       if (isSelected) {
         label.setBackground(Colors.SELECT_BLUE);
       }

       return label;
     }

   }

Problem ist, das meine Tabelle 25 Spalten und 30 Reihen hat. Die Tabelle aber nur einmal erzeugt wird und danach keine neuen Einträge oder ähnliches hinzugefügt werden. Daher müsste die Farbe nur zu Beginn einmal festgelegt werden und nicht ununterbrochen, was die Tabelle super langsam macht.
Ist das irgendwie möglich?

Danke
 
aber es gibt doch noch tabellen, die viel mehr reihen und spalten haben und in dem die Spalten unterschiedliche Farben bekommen.
Wie können diese Tabellen denn dann ohne Haken angezeigt werden?
 
Werden sie nicht. Man behilft sich mit der Limitierung der anzuzeigenden Spalten und der Eingrenzung der Zeilenanzahl auf eine bestimmte Satzanzahl bei Datenbanken z.B. so dass erst beim Scrollen und bei Erreichen des letzten Datensatzes ein neuer Satz nachgeladen wird usw.
 
aha, und wie genau kann ich das bei mir eingrenzen?

Das Beispiel siehst du ja oben... Wäre cool, wenn du helfen könntest.
 
Moin,
sorry, das Beispiel, wie man die anzuzeigenden Spalten auswählen kann, ist etwas zu umfangreich und auch abhängig vom Model.
 
BTW noch etwas:

Code:
   class ColoredRenderer
       extends JButton implements TableCellRenderer {

Warum extends JButton, wenn der nie verwendet wird und stattdessen jedesmal ein neues JLabel erzeugt wird?

Also besser extends JLabel. Damit natürlich auch an allen Stellen ersetzen:
Code:
       // Label erzeugen
       JLabel label = new JLabel( (String) value);

Zeile streichen und ersetzen durch:
--> setText(value.toString());

Und überall wo label steht, kannst Du es entfernen oder durch this ersetzen.
 

Neue Beiträge

Zurück