JTABLE aktualisieren (ohne Table Model)

dumka

Grünschnabel
Hallo,

ich habe iene Tabelle, die ohne einen TableModel eingelegt wurde. Wie kann ich eine solche Tabelle aktualisieren (ohne fireChange.....). Die Tabelle beinhaltet swing-Componeneten: JButtons usw.:
Code:
private javax.swing.JTable getTableAggregateTermine() {
		tableAggregateTermine = null;
		if (tableAggregateTermine == null) {

			tableAggregateTermine = new javax.swing.JTable(new Object[37][19], COLUMNNAMES) {
				public TableCellRenderer getCellRenderer(int row, int column) {
					TableColumn tableColumn = getColumnModel().getColumn(column);
					TableCellRenderer renderer = tableColumn.getCellRenderer();
					System.out.println(("renderer" + renderer));
					if (renderer == null) {
						Class c = getColumnClass(column);
						if (c.equals(Object.class)) {
							Object o = getValueAt(row, column);
							if (o != null)
								c = getValueAt(row, column).getClass();

						}
						renderer = getDefaultRenderer(c);
					}
					return renderer;
				}

				public TableCellEditor getCellEditor(int row, int column) {
					TableColumn tableColumn = getColumnModel().getColumn(column);
					TableCellEditor editor = tableColumn.getCellEditor();
					if (editor == null) {
						Class c = getColumnClass(column);
						if (c.equals(Object.class)) {
							Object o = getValueAt(row, column);

							if (o != null)
								c = getValueAt(row, column).getClass();
						}
						editor = getDefaultEditor(c);
					}
					return editor;
				}

				public String getColumnName(int column) {
					return COLUMNNAMES[column];
				}

			};
			// Checkboxes
			tableAggregateTermine.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
			//tableAggregateTermine.setDe
			for (int i = 0; i < COLUMNWIDTH.length; i++) {
				TableColumn col = tableAggregateTermine.getColumnModel().getColumn(i);

				col.setResizable(true);

				col.setPreferredWidth(COLUMNWIDTH[i] * IConstants.CHAR_WIDTH);

			}
			MultiLineHeaderRenderer.setMultiLineHeader(tableAggregateTermine);

			tableAggregateTermine.setRowHeight(20);

			ButtonGroup g1 = new ButtonGroup();
			//tableAggregateTermine.setModel(this);

			for (int i = 0; i < dummyDatenPEMs.size(); i++) {
				//for (int j = 0; j < DUMMYDATEN[i].length; j++) {
				System.out.println(((StatusanzeigeModel) dummyDatenPEMs.get(i)).getBaiE());
				JTextField textFieldBAIE = new JTextField(((StatusanzeigeModel) dummyDatenPEMs.get(i)).getBaiE());
				JButton buttonPEM = new JButton(((StatusanzeigeModel) dummyDatenPEMs.get(i)).getPem());
				JTextField textFieldPEM = new JTextField(((StatusanzeigeModel) dummyDatenPEMs.get(i)).getPem());
				buttonPEM.addActionListener(this);
				JTextField textFieldSNR = new JTextField(((StatusanzeigeModel) dummyDatenPEMs.get(i)).getSnr());
				JTextField textFieldSerienbedarfstermin =
					new JTextField(((StatusanzeigeModel) dummyDatenPEMs.get(i)).getSerienbedarfstermin());

				JTextField textFieldColor = new JTextField();
				//textFieldColor.setBackground(COLORS[i]);

				tableAggregateTermine.setValueAt(textFieldBAIE, i, 0);
				if (((StatusanzeigeModel) dummyDatenPEMs.get(i)).isSnrObject() == true)
					tableAggregateTermine.setValueAt(textFieldPEM, i, 1);
				else
					tableAggregateTermine.setValueAt(buttonPEM, i, 1);
				tableAggregateTermine.setValueAt(textFieldSNR, i, 2);
				tableAggregateTermine.setValueAt(textFieldSerienbedarfstermin, i, 3);
							}

			
			tableAggregateTermine.setDefaultRenderer(JComponent.class, this);
			tableAggregateTermine.setDefaultEditor(JComponent.class, new JComponentCellEditor());
					}
		return tableAggregateTermine;
	}

	public Component getTableCellRendererComponent(
		JTable table,
		Object value,
		boolean isSelected,
		boolean hasFocus,
		int row,
		int column) {
		JComponent component = (JComponent) value;
		return component;
	}
 
1. Es wäre nett, wenn nur der relevante Code gepostet wird
2. Ohne TableModel sind nicht-triviale Tabellen unübersichtlich und schwierig zu handlen. Eigentlich sollte man Programmierer, die so vorgehen, unter Strafe stellen. :-)
3. Normalerweise sollte es dann via
myTable.getModel().fireTableDataChanged(); funktionieren.
 
Original geschrieben von Snape
1. Es wäre nett, wenn nur der relevante Code gepostet wird
2. Ohne TableModel sind nicht-triviale Tabellen unübersichtlich und schwierig zu handlen. Eigentlich sollte man Programmierer, die so vorgehen, unter Strafe stellen. :-)

Eigentlich nicht nur unter Strafe stellen sondern vom Download des SDKs ausschließen ;-)

3. Normalerweise sollte es dann via
myTable.getModel().fireTableDataChanged(); funktionieren.
 
3. Normalerweise sollte es dann via
myTable.getModel().fireTableDataChanged(); funktionieren.


Also ich habe ein aehnliches Problem und wenn ich myTable.getModel() aufrufe, gibt es kein fireTableDataChanged(); :confused:
Wenn ich das Model, das ich ueber myTable.setModel(model) zuweise, direkt anspreche, existiert die Methode jedoch.

Ich erstelle den JTable in einer Methode und gebe ihn ueber return zurueck.

In einer Action soll die Tabelle dann jedes mal neu gezeichnet und dargestellt werden...

Jemand eine Idee?

EDIT: hat sich erledigt! Man muss nicht den ganzen JTable sondern nur dessen Model aktualisieren...
 
Zuletzt bearbeitet:
Zum Verständnis:
Wenn sich nur die Daten in der Tabelle ändern, genügt fireTableDataChanged(). Wenn sich auch Spalten, Header oder ähnliches ändern (sollen), ist ein fireTableStructureChanged() (beide aus dem AbstractTableModel) notwendig. Dadurch wird die Tabelle neu gezeichnet/gerendert.
 
Zurück