2009-08-18 20 views
3

Ich versuche, ein Symbol, um eine bestimmte JTable Spalte hinzuzufügen durch meine eigene Tabelle CellRenderers wie unten (based on parts of this tutorial) festgelegt wird:ein Symbol JTable Hinzufügen von DefaultTableCellRenderer zwingende

public class MyTableCellRenderer extends DefaultTableCellRenderer { 

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

     JLabel label = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

     if(column == MyTableModel.IMAGE_COLUMN){ 
      String status = (String)value; 
      Icon icon = StatusImageUtil.getStatusIcon(status); 

      if(icon == null){ 
       label.setText(status); 
      }else{ 
       label.setIcon(icon); 
      } 
     } 
     return label; 
    } 
} 

Der obige Code funktioniert, aber:

  1. Alle Zellen haben das Symbol statt die spezifischen i in die angegebene wollen if-Anweisung
  2. Zelle MyTableModel.IMAGE_COLUMN dem sollte nur ein Symbol haben auch Text.

Vielen Dank im Voraus

Antwort

4

Für eine bessere Performance-Gründen JTable das gleiche Label es macht für jede Zelle wieder verwendet. Das bedeutet, dass Sie jedes Mal, wenn Sie es ändern, sowohl Text als auch Symbol festlegen müssen.

Das gleiche gilt für Schriftarten, backgroundcolors und dergleichen

if(icon == null){ 
        label.setText(status); 
        label.setIcon(null); 
      }else{ 
        label.setText(""); 
        label.setIcon(icon); 
      } 

sollte es tun,

+0

Dank, wusste nicht, dass das gleiche Etikett für alle Tabellenzellen wiederverwendet wird. Mit dem obigen Code habe ich immer noch die gleichen Ergebnisse. Ich habe es gelöst, indem ich das Symbol gleich nach dem Umwandeln des Tabellenzellen-Renderers in JLabel auf Null gesetzt habe. – n002213f

+0

Yup mein Adivce hat nicht geholfen, weil ich über die Spalte vergessen habe == MyTableModel.IMAGE_COLUMN Test – Peter