B
Beni
Gast
Beni hat gesagt.:JTable - Teil 3 - Breite der Spalten
Die Breite der Spalten lässt sich über die Objekte der Klasse TableColumn verändern.
Dabei benutzt man nicht die Methode setWidth, sondern die Methode setPreferredWidth.
Natürlich kann man die Breite der Spalten erst festlegen, nachdem man das Model mit der Anzahl Spalten übergeben hat.
1. Möglichkeit - Direkt
Man kann die TableColumns über ihren Titel abrufen.
Java:import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; public class JTableDemo{ public static void main( String[] args ){ // Die Daten für das Table String[][] data = new String[][]{ {"a", "b", "c", "d"}, {"e", "f", "g", "h"}, {"i", "j", "k", "l"} }; // Die Column-Titles String[] title = new String[]{ "A", "B", "C", "D" }; // Das JTable initialisieren JTable table = new JTable( data, title ); // Das automatische Neusetzen der Grösse würde das Vorhaben, die Grösse selbst // zu setzen, stören. table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF ); table.getColumn( "A" ).setPreferredWidth( 20 ); table.getColumn( "B" ).setPreferredWidth( 50 ); table.getColumn( "C" ).setPreferredWidth( 80 ); table.getColumn( "D" ).setPreferredWidth( 110 ); JFrame frame = new JFrame( "Demo" ); frame.getContentPane().add( new JScrollPane( table ) ); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); frame.pack(); frame.setVisible( true ); } }
2. Möglichkeit - Mit Indices über das TableColumnModel
Nicht immer gibt es ein eindeutiges Objekt, welches eine Column identifiziert. Ein simples Beispiel: es wird zweimal derselbe Titel gewählt, oder die Titel sind dynamisch, und man weiss nicht, wann welcher Titel angezeigt wird.
In diesem Fall muss man tiefer in das JTable hineinlangen, um die Columns zu erreichen. Man muss das TableColumnModel befragen.
Java:import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.TableColumnModel; public class JTableDemo{ public static void main( String[] args ){ // Die Daten für das Table String[][] data = new String[][]{ {"a", "b", "c", "d"}, {"e", "f", "g", "h"}, {"i", "j", "k", "l"} }; // Die Column-Titles String[] title = new String[]{ "A", "A", "A", "A" }; // Das JTable initialisieren JTable table = new JTable( data, title ); // Das automatische Neusetzen der Grösse würde das Vorhaben, die Grösse selbst // zu setzen, stören. table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF ); // ßber das TableColumnModel kommt man an die wichtigen Daten TableColumnModel columnModel = table.getColumnModel(); // Die einzelnen Columns ansprechen und die Grösse setzen columnModel.getColumn( 0 ).setPreferredWidth( 20 ); columnModel.getColumn( 1 ).setPreferredWidth( 50 ); columnModel.getColumn( 2 ).setPreferredWidth( 80 ); columnModel.getColumn( 3 ).setPreferredWidth( 110 ); JFrame frame = new JFrame( "Demo" ); frame.getContentPane().add( new JScrollPane( table ) ); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); frame.pack(); frame.setVisible( true ); } }
3. Der Auto-Resize-Modus
In den beiden vorangegangen Beispielen wurd der Autoresize-Modus deaktiviert.
Java:table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
Wenn man diese Zeile weglässt, versucht das JTable die Grösse der Spalten anzupassen. Dabei benutzt es die Einstellungen der "preferredWidth", welche man ja verändert hat:
Mit dem normalen Resize-Mode:
Zum Vergleich, mit deaktiviertem Resize-Mode:
© August 2004
Dieses Tutorial unterliegt dem Copyright, Kopien (auch nur von Teilen) sind nur für nicht-komerzielle Zwecke gestattet; Detailfragen (insbesondere bei Unsicherheiten), bitte direkt an die Autoren.