automatische Zeilenhöhen Anpassung bei JTable

Sinus

Aktives Mitglied
Hallo,

beim googlen habe ich eine Methode gefunden, mit der man die Zeilenhöhe einer JTabelle automatisch anpassen kann. Die Methode heißt updateRowHeights. Leider funktioniert es aber irgendwie noch nicht.

Hier mein Code:

Java:
import javax.swing.*;
import java.awt.*;

public class ExampleTable {
	JTable textTable;

	public JPanel createTable() {        		
		JPanel totalGUI = new JPanel();
					
		//define titles for table
        String[] title = {"TITLE1", "TITLE2", "TITLE3"};

        //table data
        Object[][] playerdata = {       
        {new Integer(34), "Steve", "test test test"},
        {new Integer(32), "Patrick", "du hu hu hu hu hu hu hu uh u kkkkkk oooo pppp"},
        {new Integer(10), "Sarah", "xxxxxxxxxxxxx aaaaaaaaaa bbbbbbbbbbbbb dddddddddddd xxxxxxx gggewr  eeeeeeeeee ddd g fffffff zzzzzzz"},};
        
        //create object 'textTable'
        textTable = new JTable(playerdata,title);
               
        //adjust dynamically the Row height of each cell
        updateRowHeights();
        
        //put line breaks if string is longer than cell-width
        RowHeightCellRenderer dynRow = new RowHeightCellRenderer();
        textTable.getColumnModel().getColumn(2).setCellRenderer(dynRow);
        System.out.println(textTable.getPreferredSize().height);
                
        //scrollbar
        JScrollPane scrollPane = new JScrollPane(textTable);
        
        totalGUI.add(scrollPane);				
		return totalGUI;
	}

	private void updateRowHeights() {
    
        for (int row = 0; row < textTable.getRowCount(); row++) {
            int rowHeight = textTable.getRowHeight();
            for (int column = 0; column < textTable.getColumnCount(); column++)
            {
                Component comp = textTable.prepareRenderer(textTable.getCellRenderer(row, column), row, column);
                rowHeight = Math.max(rowHeight, comp.getPreferredSize().height);
            }
            textTable.setRowHeight(row, rowHeight);
        }
	}
	
	private static void createAndShowGUI() {

		//create main frame
		JFrame mainFrame = new JFrame("");
		ExampleTable test = new ExampleTable();
		JPanel totalGUI = new JPanel();
		totalGUI = test.createTable();
													      
		//visible mode
		mainFrame.add(totalGUI); //integrate main panel to main frame
		mainFrame.pack();
		mainFrame.setVisible(true);		
	}
	
	
	public static void main (String[] args)	{				
        
		createAndShowGUI();		
		
	}//main
}

Könnte ich da noch irgendwas vergessen haben?

Vielen Dank und beste Grüße
Sinus
 
Moin VFL_Freak,

ok, d.h. dass die Zeilenhöhen der entsptrechenden Zellen in der JTable trotz Aufruf der Methode
updateRowHeight nicht angepasst werden. Ich weiß aber auch warum:

1. updateRowHeight muss nach dem renderer stehen
Java:
//put line breaks if string is longer than cell-width
RowHeightCellRenderer dynRow = new RowHeightCellRenderer();
textTable.getColumnModel().getColumn(2).setCellRenderer(dynRow);
System.out.println(textTable.getPreferredSize().height);
        
//adjust dynamically the Row height of each cell
updateRowHeights();

2. die bevorzugte Größe comp.getpreferredSize.height
Java:
rowHeight = Math.max(rowHeight, comp.getPreferredSize().height);
ist immer 18, obwohle sie ja doch größer sein müsste. Aber warum??

Irgendwelche Ideen?


beste Grüße
SinuS
 
Zuletzt bearbeitet:

Zurück
Oben