JCheckBox in JTable

Moltar

Mitglied
Hallo,
ich habe ein Problem mit einer JCheckBox als Zellrenderer und Zelleditor in einer JTable.

Ich habe auch bei Google und hier im Forum einiges dazu gefunden. Folgene Problemsituation:
- Ich ändere in einer beliebigen Zeile die Checkbox (an/aus).
- Ich ändere den Wert einer Checkbox in einer anderen Zeile (an/aus).
- Meine JFrame 'friert ein', d.h. die Anzeige wird nicht mehr aktualisiert. Wenn ich beispielsweise eine Zeile hinzufüge, sehe ich das nicht. Ich kann aber die Felder der neu eingefügten Zeile markieren. Wenn ich den JFrame aus- und wieder einblende (setVisible() oder minimieren, wiederherstellen), dann ist er zunächst leer. Wenn ich mit der Maus über die Stellen fahre, an denen Steuerelemente sind, werden diese wieder sichtbar. (siehe auch Screenshots: im 2. Bild habe ich ein bisschen auf der Oberfläche rumgeklickt, damit zumindest ein Teil der Elemente sichtbar wird).

Hier mein Code:
Code:
	private class CheckBoxRenderer extends JCheckBox implements TableCellRenderer {
		private static final long serialVersionUID = 1L;
		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
			super.setOpaque(true);
			if(((String)value).equals("1")) {
				super.setSelected(true);
			} else {
				super.setSelected(false);
			}
			return this;
		}
	}
	
	private class CheckBoxEditor extends AbstractCellEditor implements TableCellEditor {
		private static final long serialVersionUID = 1L;
		private JCheckBox component = null;
		
		public Component getTableCellEditorComponent(JTable tab, Object value, boolean isSelected, int row, int col) {
			component = new JCheckBox();
			if(((String)value).equals("1")) {
				component.setSelected(true);
			} else {
				component.setSelected(false);
			}
			return component;
		}
		
		public Object getCellEditorValue() {
			return component.isSelected();
		}
	}

Zur Verwaltung des Zelleditors und Zellrenderers verwende ich:

Code:
private TableCellRenderer[] renderers = null;
	private TableCellEditor[] editors = null;

	public void setCheckBoxRenderer(int col) {
		renderers[col] = new CheckBoxRenderer();
	}

	public void setCheckBoxEditor(int col) {
		editors[col] = new CheckBoxEditor();
	}

	public TableCellRenderer getCellRenderer(int row, int col) {
		if(renderers[col] != null) {
			return renderers[col];
		}
		return super.getCellRenderer(row, col);
	}
	
	public TableCellEditor getCellEditor(int row, int col) {
		if(editors[col] != null) {
			return editors[col];
		}
		return super.getCellEditor(row, col);
	}

Für Hinweise wäre ich dankbar.

Tobi

PS: Die unter Hälfte des JFrames ist leer, ich habe sie aus Gründen der Bildgröße abgeschnitten.
 

Anhänge

  • JFrameOK.jpg
    JFrameOK.jpg
    29,3 KB · Aufrufe: 57
  • JFRameDefekt.jpg
    JFRameDefekt.jpg
    19,3 KB · Aufrufe: 47
Zurück