JTable: Zellen Editieren und ausrichten

p1ttypl4tsch

Grünschnabel
Hallo


ich habe eine JTable, mit einem TableModel vom DefaultTableModel abgeleitet.
Nachdem ich mich schon mit der Suche (Google und Tutorials.de) vergnügt habe, bleiben dazu noch drei Fragen/Probleme.

1. Wie bekomme ich es hin, dass Werte, die ich in die einzelnen Zellen eingebe auch da stehen bleiben? Bei mir verschwinden sie sofort wieder und der Standard-Wert steht wieder drin.

2. Ich möchte die erste Spalte (H1, nicht editierbar) rechtsbündig machen, die anderen beiden jedoch zentriert(H2, H3, editierbar); geht das? und wenn ja wie? Und kann ich die neuen Werte dann auch wieder auslesen?

3. Die zweit und dritte Spalte soll mehrzeilig werden. Wie realisiere ich das?

Bitte verständlich erklären, da es das erste mal ist, dass ich mit JTable etwas mache und ich auch sonst noch recht neu in Java bin ...
danke schonmal :)

Code:
public Plan_Frame() {
		super("Tabelle");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		// Spaltenmodell erzeugen
		DefaultTableColumnModel cm = new DefaultTableColumnModel();
		for (int i = 0; i < HEADER.length; ++i) {
			TableColumn col = new TableColumn(i, i == 0 ? 60 : 200);
			col.setHeaderValue(HEADER[i]);
			col.setResizable(false);
			cm.addColumn(col);
		}
		
		// Tabellenmodell erzeugen
		dtm = new DefaultTableModel(1,3){
			public boolean isCellEditable(int row, int column) {
				if (column > 0) {
					return true;
				} else {
					return false;
				}
			}
			public Object getValueAt(int row, int column){
				return DATA[row][column];
			}
		};

		// Tabelle erzeugen und ContentPane füllen
		table = new JTable(dtm, cm);
		table.setRowSelectionAllowed(false);
		table.setColumnSelectionAllowed(false);
		
		Container cp = getContentPane();
		cp.add(new JLabel("Tabellenüberschrift:"), BorderLayout.NORTH);
		cp.add(new JScrollPane(table), BorderLayout.CENTER);
	}
	public static final String[] HEADER = { "H1", "H2","H3" };
	public static final String[][] DATA = { { "1", "", "" } };
 
Hallo,

du solltest dir vielleicht mal alle Methoden des TableModels anschauen. Da gibt es auch eine Methode setValue. Diese Methode musst du ebenfalls überschreiben.
Ich weiß auch nicht ganz wo dein Array DATA herkommt, aber das in einem DefaultTableModel zu verwenden ist nicht sehr sinnvoll. Dann leite doch lieber dein Model vom AbstractTableModel ab.

Um die Zellen mehrzeilig zu bekommen solltest du dir den TableCellRenderer anschauen. Dort definierst du wie eine Zelle aussehen soll.

MFG

Sascha
 
Zurück