Zeilenhöhe ändern funktioniert nicht

Moin,

ich kann mir nicht erklären, warum an meiner JTable die setRowHeight(int)-Methode nicht funktionieren will.

Ich habe mir ein Objekt von JTable erzeugt und möchte, nach dem ich die Höhe des Headers und die Breiten der Spalten eingestellt habe, auch noch die Zeilenhöhe der Zeilen verändern.
Aus einem von mir nicht ermittelbaren Grund funktioniert aber das Ändern der Zeilenhöhe nicht. Die Zeilen behalten ihre Höhe. Die Spaltenbreiten einzustellen, klappt wunderbar.


        JTableHeader header = table.getTableHeader();
        DefaultTableCellRenderer headerRenderer = (DefaultTableCellRenderer) header.getDefaultRenderer();
        headerRenderer.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
        header.setPreferredSize(new Dimension(0, 45));
        TableColumnModel columnModel = table.getColumnModel();

        for (int i = 0, c = columnModel.getColumnCount(); i < c; i++) {
            switch (i) {
                case 0:
                    columnModel.getColumn(i).setPreferredWidth(100);
                    columnModel.getColumn(i).setMinWidth(80);
                    break;
                case 1:
                    columnModel.getColumn(i).setPreferredWidth(70);
                    columnModel.getColumn(i).setMinWidth(70);
                    break;
                case 2:
                    columnModel.getColumn(i).setPreferredWidth(350);
                    columnModel.getColumn(i).setMinWidth(250);
                    break;
            }
        }

        MyTableCellRenderer cellRenderer = new MyTableCellRenderer();
        table.setDefaultRenderer(Date.class, cellRenderer);
        table.setDefaultRenderer(String.class, cellRenderer);

        table.setRowHeight(30);


Kann mir das jemand erklären?

der Fluch des nichtvollständigen Testprogramms…, deine Zeilen bei mir eingefügt ergibt es sehr wohl einen Unterschied, ob RowHeight geändert wird,
vielleicht vom umgebenden Layout/ Platz abhängig


die column-Schleife ist schwer anzusehen,
ist es unsicher wieviele Spalten da sind? sonst würden ja 3x 2 feste Befehle dasselbe tun,

ich habe bei mir zumindest noch eine lokale Variable statt 6x columnModel.getColumn(i) angelegt,
noch besser wäre, im switch nur die Werte in int-Variablen zu schreiben, setPreferredWidth-Aufruf usw. nur genau 1x nach dem switch,
und die nächste Stufe wäre dann, die Werte platzsparend in einem Array unterzubringen


	public static void main(String args[]) {
		DefaultTableModel model = new DefaultTableModel(new Object[4][5],
				new Object[] { "a", "b", "c", "d" });
		JTable table = new JTable(model);

		JTableHeader header = table.getTableHeader();
		DefaultTableCellRenderer headerRenderer = 
                     (DefaultTableCellRenderer) header.getDefaultRenderer();
		headerRenderer.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
		header.setPreferredSize(new Dimension(0, 45));
		TableColumnModel columnModel = table.getColumnModel();

		for (int i = 0, count = columnModel.getColumnCount(); i < count; i++) {
			TableColumn c = columnModel.getColumn(i);
			switch (i) {
			case 0:
				c.setPreferredWidth(100);
				c.setMinWidth(80);
				break;
			case 1:
				c.setPreferredWidth(70);
				c.setMinWidth(70);
				break;
			case 2:
				c.setPreferredWidth(350);
				c.setMinWidth(250);
				break;
			}
		}

		MyTableCellRenderer cellRenderer = new MyTableCellRenderer();
		table.setDefaultRenderer(Date.class, cellRenderer);
		table.setDefaultRenderer(String.class, cellRenderer);

		table.setRowHeight(30);

		JFrame f = new JFrame();
		JScrollPane scrollPane = new JScrollPane(table);
	    f.add(scrollPane);
		f.setSize(900, 300);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}

	static class MyTableCellRenderer extends DefaultTableCellRenderer {

	}
}

Danke für’s Ansehen und Aushalten, SlaterB. :wink:

Jo, das Ganze ist heute Nachmittag nach mehreren Stunden probieren so stehen geblieben… Stimmt, da sind unschöne Sachen drin.
Aber deinem Tipp mit dem Layout werde ich mal nachgehen.