CheckBox in Tabelle zeichnen

Status
Nicht offen für weitere Antworten.

Vatar

Bekanntes Mitglied
Moin Moin.

Ich habe mir für meine Tabelle einen eigenener CellRenderer geschrieben, der in der dritten Spalte eine JCheckBox malern soll.
Ich weis, dass es dafür die Method
Code:
public Class getColumnClass(int c) {
   return getValueAt(0, c).getClass();        
}// endmethod
Die nützt mir aber nix, denn wenn ich meinen eigenen Renderer und diese MEthode nutze wird nur der Wert true oder false geschrieben (kein CheckBox) und mit dem StandardRenderer hat diese Spalte dann ein anderes Layout (nicht gewünscht).

Deshalb meine Frage, wie kann ich in meinem Renderer vereinbaren, dass wenn die Spalte = 3 (2) ist eine CheckBox gemalert wird je nachdem ob der value true oder false ist.

Mein CellRnderer
Code:
package gui.tables;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;

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

public class TableCellRenderer extends DefaultTableCellRenderer
{
    
    private Color unselectedForeground; 
    private Color unselectedBackground; 
    
    private Font font = new Font("Arial", Font.BOLD, 12);
    
    
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) 
    {
        super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column ); 
        
        // gerade Zeilen werden coloriert
        if ( (row % 2) == 0 )
        {
            setBackground( new Color(242, 199, 28));
        }
        // ungerade Zeilen haben weißen Hintergrund
        else if (row % 2 != 0)
        {
            setBackground( Color.WHITE);
        }
		
        // Wenn die aufrufende Klasse den Namen "gui.tables.VehicleTable" hat wird die Schrift der ersten spalte geändert
        if(table.getClass().getName().equals("gui.tables.VehicleTable") && column == 0)
        {
            setFont(font);
        }
        
            
        // TODO    
//		
//            if (isSelected) 
//		{
//			super.setForeground(table.getSelectionForeground());
//			super.setBackground(table.getSelectionBackground());
//		}
//		else 
//		{
//		    super.setForeground((unselectedForeground != null) ? unselectedForeground 
//		                                             : table.getForeground());
//		    super.setBackground((unselectedBackground != null) ? unselectedBackground 
//		                                             : table.getBackground());
//		}
//		
//			setFont(table.getFont());
			
		if (hasFocus) 
		{
			setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") );
			if (table.isCellEditable(row, column)) 
			{
				super.setForeground( UIManager.getColor("Table.focusCellForeground") );
				super.setBackground( UIManager.getColor("Table.focusCellBackground") );
			}// end if
		} 
		
		else 
		{
		    setBorder(noFocusBorder);
		}// end else
		
        
		setValue(value); 
		
		return this;
	}
    
    
}// end class TableCellRenderer

Ist wirklich wichtig, und mit :### komm ich auch nicht weiter.

Thx
 
Ich hoffe mit "Ist wirklich wichtig, und mit :### komm ich auch nicht weiter. " ist nicht unsere liebe FAQ gemeint.

Dein Renderer wird nie eine Checkbox zeichnen, weil da absolut niergends eine Checkbox ist...

Schreib dein "CheckBoxRenderer" (der eine CheckBox zeichnet), und füg ihn der Tabelle an, indem du
Code:
table.setDefaultRenderer( Boolean.class, new CheckBoxRenderer() );
verwendest.
Das "getColumnClass" solltest du dann so hinschreiben:

Code:
public Class getColumnClass( int c ){
  switch( c ){
    case 0: return String.class; // oder was auch immer
    ...
    case 2:
    case 3: return Boolean.class; // jetzt wird in Column 2 und 3 der CheckBoxRenderer verwendet.

    default: return null;
  }
}

Das hat vorallem auch den Vorteil, dass dein Progi nicht abstürzt, sollte die Tabelle mal leer sein :wink:
 
Auf die Idee, dass da so wertvolle Dinge drinstehen, bin ich noch gar nicht gekommen. :lol:

Habt ihr schon mal überlegt ein eigenes Buch rauszubringen, ist nämlich wesentlich besser erklärt als beispielsweise in der JavaInsel.

:applaus: :applaus: :applaus:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben