Swing JTable: Boolean Renderer

Zenic

Mitglied
Hallo,

ich habe für meine Tabelle einen eigenen Renderer für Boolean Objekte geschrieben. Dieser beinhaltet anstelle der Checkbox ein JLabel (mit Icon). Wenn ich nun auf das Label klicke erscheint für einen kurzen Augenblick die Checkbox und zeigt erst danach das andere Icon an.

Code:
Renderer
Java:
public class IconRenderer extends JLabel implements TableCellRenderer {

	@Override
	public Component getTableCellRendererComponent(final JTable table, Object valid, boolean isSelected, boolean hasFocus, int row, int column) {
		setOpaque(true);
		setHorizontalAlignment(SwingConstants.CENTER);
		if (isSelected)
			setBackground(table.getSelectionBackground());
		else
			setBackground(table.getBackground());

		if ((Boolean) valid) {
			setIcon(icon1);
			return this;
		} else {
			setIcon(icon2);
			return this;
		}
	}

}

setValueAt() (Auf das Wesentlichste reduziert)
Java:
	public void setValueAt(Object aValue, int row, int column) {
		Object x = getSelectedCode(row);
		switch (column) {
		case 0:
			x.setValid((Boolean) aValue);
			fireTableCellUpdated(row, column);	
			return;
		default:
			return;
		}

Was kann ich tun damit die Checkbox nicht sichtbar wird?

Danke
Zenic
 
du musst wohl auch einen Editor setzten, dann allerdings selber dafür sorgen, dass der Wert geändert wird usw.
 
Danke, habe es hinbekommen.

Nun hat sich ein neues Problem aufgetan. Ich habe eine Methode die die Datenquelle (ArrayList) ändert und anschließend die fireTableDataChanged(); Methode aufruft. Die Tabelle wird jedoch nicht sofort neu gezeichnet, sondern erst wenn ich den Rahmen des JFrames bewege.

danke
Zenic

Edit:
Habe nun gemerkt, dass es funktioniert wenn ich die Listener "händisch" benachrichtige.
Java:
for(TableModelListener l : listeners){
			l.tableChanged(new TableModelEvent(this));
		}
Ist das nicht eigentlich die Aufgabe der fireTableDataChanged();?
 

Zurück
Oben