Dringendes TableRowSorter und CellRenderer Problem!

Status
Nicht offen für weitere Antworten.

scheibl

Aktives Mitglied
Komm irgendwie bei meinem Problem nicht weiter. Ich will, dass Zeilen in meiner JTable, die als fixiert ausgewählt wurden, mit einer Farbe hinterlegen. Dies funktioniert auch wunderbar. Wenn ich jz aber die Table anders sortiere (mit dem TableRowSorter), verändert sich die Farbe nicht mit der ichtigen Zeile mit.

Hab das forum schon durchsucht und eine methode namens convertrowindextomodel gefunden. Doch die bringt mich irgendwie nicht weiter.

Hab einen RowsorterListener, in dem ich den CellRenderer aufrufe. Die jTable wird mit Daten aus einer list (Pl_init.plist1) befüllt.

Mit Pl_init.plist1.getFixiert() frägt man ab, ob eine Zeile fixiert werden soll oder nicht. Die jTable heißt tabtag3.

Hier der Code dazu:


Code:
    ... 
        sorter.addRowSorterListener(new RowSorterListener(){ 
            public void sorterChanged(RowSorterEvent e) { 
                tabtag3.setDefaultRenderer(Object.class, new ColorCellRenderer()); 
                tabtag3.repaint(); 
            } 
        }); 
    ...



Der CellRenderer:



Code:
package gui; 

/** 
* 
* @author scheibl 
*/ 
import algorithmus.Pl_init; 
import java.awt.Color; 
import java.awt.Component; 

import javax.swing.JTable; 
import javax.swing.table.DefaultTableCellRenderer; 
import javax.swing.table.TableCellRenderer; 

class ColorCellRenderer implements TableCellRenderer { 

  public static final DefaultTableCellRenderer DEFAULT_RENDERER = 
    new DefaultTableCellRenderer(); 

  public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int row, int column) { 
    Component renderer = 
      DEFAULT_RENDERER.getTableCellRendererComponent(table, value, 
      isSelected, hasFocus, row, column); 
    Color foreground, background; 
    
    if (isSelected) { 
        
      foreground = table.getSelectionForeground(); 
      background = table.getSelectionBackground(); 
    } 
    else 
    { 
        if(Pl_init.plist1.get(row).getFixiert() == true) 
        {    
            foreground = Color.BLACK; 
            background = Color.getHSBColor((float) 62.3, (float) 0.3, (float) 1.0); 
        }      
        else 
        { 
            foreground = table.getForeground(); 
            background = table.getBackground(); 
        }    
    } 
    renderer.setForeground(foreground); 
    renderer.setBackground(background); 
    return renderer; 
  }



DANKE FÜR EURE HILFE!!!
 
M

Michael...

Gast
anhand des Codes kann man da wenig sagen. Was genau steckt denn hinter der Liste. Wahrscheinlich muss sie zusammen mit dem Datenmodell sortiert werden.
 

Marco13

Top Contributor
scheibl hat gesagt.:
Mit Pl_init.plist1.getFixiert() frägt man ab, ob eine Zeile fixiert werden soll oder nicht. Die jTable heißt tabtag3.

...

Code:
...
        if(Pl_init.plist1.get(row).getFixiert() == true) 
...

Die genannte Methode müßte da eigentlich helfen...

Code:
...
        if(Pl_init.plist1.get(table.convertRowIndexToModel(row)).getFixiert() == true) 
...
!?
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben