Zellenhöhe in JTable

JBenutzername

Aktives Mitglied
Hallo zusammen,

ich möchte eine einspaltige Tabelle verwenden, in der die Zellen unterschiedliche Höhen haben. Aus diesem Grund benutze ich auch keine JList. Die Zellen sollen so breit sein wie die Tabelle und so hoch wie nötig, um alles darstellen zu können. Mein Problem ist nun, dass ich nicht weiß, wie ich diese Höhe berechnen kann. In den Zellen soll ein JLabel mit HTML verwendet werden.

Java:
public class Test extends JFrame {

    public Test() {
        setLayout(new BorderLayout());
        JTable table = new JTable();

        table.setModel(new DefaultTableModel(
                                        new String[][] {
                                                        {
                                                            "A"
                                                        },
                                                        {
                                                            "AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA "
                                                        }, {
                                                            "A"
                                                        }, {
                                                            "A"
                                                        }
                                        }, new String[] {
                                            "Spalte"
                                        }));

        table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {

            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
                            boolean hasFocus, int row, int column) {
                JLabel l = (JLabel) super
                                .getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                l.setText("<html>" + value + "</html>");

                // TODO Höhe der Zeile setzen

                return l;
            }
        });

        add(new JScrollPane(table), BorderLayout.CENTER);
        setVisible(true);
        setSize(200, 400);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }


    public static void main(String[] args) throws ClassNotFoundException, InstantiationException,
                    IllegalAccessException, UnsupportedLookAndFeelException {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Test();
            }
        });

    }

}
 
Auch in einer JList können einzelne Zellen unterschiedliche Höhen besitzten. Hier mal q&d:
Java:
		JLabel label1 = new JLabel("<html>test<br>test<br>test</html>");
		JLabel label2 = new JLabel("<html>test</html>");
		JList list = new JList(new JLabel[] {label1, label2});
		list.setCellRenderer(new DefaultListCellRenderer() {
			public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
				Component comp = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
				JLabel label = (JLabel)value;
				label.setOpaque(true);
				label.setBackground(comp.getBackground());
				label.setForeground(comp.getForeground());
				return label;
			}
		});
In einer JTable könnte man anhand der PreferredSize() der Komponente per setRowHeight(int row, int rowHeight) die Zeilenhöhe anpassen.
 
Naja, sobald da automatische Zeilenumbrüche mit im Spiel sind wird's ein bisschen komplizierter. Wüsste jetzt spontan keine Komponente, die da die benötigte Höhe liefert.
 

Neue Themen


Zurück
Oben