Ich habe eine JTable, in der ich die Spaltengröße wie folgt einstelle:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(27);
table.getColumnModel().getColumn(1).setPreferredWidth(120);
table.getColumnModel().getColumn(2).setPreferredWidth(100);
table.getColumnModel().getColumn(3).setPreferredWidth(90);
table.getColumnModel().getColumn(4).setPreferredWidth(90);
table.getColumnModel().getColumn(6).setPreferredWidth(120);
table.getColumnModel().getColumn(7).setPreferredWidth(100);
table.getColumnModel().getColumn(8).setPreferredWidth(95);
table.getColumnModel().getColumn(9).setPreferredWidth(40);
table.getColumnModel().getColumn(10).setPreferredWidth(400);
Dies funktioniert gut, aber wenn die Tabelle maximiert ist, wird rechts von der letzten Spalte ein leerer Bereich angezeigt. Ist es möglich, die Größe der letzten Spalte bis zum Ende des Fensters zu ändern, wenn die Größe geändert wird?
Ich habe eine AUTO_RESIZE_LAST_COLUMN
Eigenschaft in Dokumenten gefunden, aber es funktioniert nicht.
Bearbeiten: JTable
ist in einer JScrollPane
seiner bevorzugten Größen eingestellt.
Mit
JTable.AUTO_RESIZE_OFF
ändert die Tabelle die Größe einer der Spalten für Sie nicht, sodass Ihre bevorzugte Einstellung verwendet wird. Wenn es Ihr Ziel ist, die Spalten standardmäßig auf Ihre bevorzugte Größe zu bringen, außer dass die letzte Spalte den Rest desJTable.AUTO_RESIZE_LAST_COLUMN
Bereichs ausfüllt, haben Sie die Möglichkeit, den autoResizeMode zu verwenden. Dies ist jedoch möglicherweise am effektivsten, wenn SieTableColumn.setMaxWidth()
anstelle von TableColumn verwendet werden. setPreferredWidth () für alle außer der letzten Spalte.Sobald Sie zufrieden sind, dass
AUTO_RESIZE_LAST_COLUMN
dies tatsächlich funktioniert, können Sie mit einer Kombination ausTableColumn.setMaxWidth()
und experimentierenTableColumn.setMinWidth()
quelle
JTable.AUTO_RESIZE_LAST_COLUMN
ist definiert als "Bei allen Größenänderungsvorgängen nur Anpassungen an der letzten Spalte vornehmen", was bedeutet, dass Sie den automatischen Größenmodus am Ende Ihres Codes festlegen müssen , da sonst setPreferredWidth () keine Auswirkungen hat!In Ihrem Fall wäre dies also der richtige Weg:
quelle
Verwenden Sie diese Methode
Oder erweitern Sie die
JTable
Klasse:Und dann
quelle
Lesen Sie die Bemerkung von Kleopatra (ihr zweites Mal schlug sie vor, sich javax.swing.JXTable anzuschauen , und jetzt tut es mir leid, dass ich das erste Mal nicht nachgesehen habe :)) Ich schlage vor, Sie folgen dem Link
Ich hatte diese Lösung für das gleiche Problem: (aber ich schlage vor, Sie folgen dem obigen Link) Skalieren Sie beim Ändern der Tabellengröße die Tabellenspaltenbreiten auf die aktuelle Gesamtbreite der Tabelle. Dazu verwende ich ein globales Int-Array für die (relativen) Spaltenbreiten:
Ich benutze diese Funktion, um die Tabellenspaltenbreiten einzustellen:
Beim Einstellen der Daten rufe ich an:
und beim Ändern rufe ich den ComponentListener auf, der auf das übergeordnete Element der Tabelle festgelegt ist (in meinem Fall das JScrollPane, das der Container meiner Tabelle ist):
Beachten Sie, dass die JTable-Tabelle auch global ist:
Und hier stelle ich den Hörer ein:
quelle
wird das Größenänderungsverhalten standardmäßig festlegen ! Wenn diese Methode irgendwo in Ihrem Code aufgerufen wird, nachdem Sie die Eigenschaften für die Spaltengröße festgelegt haben, werden alle Ihre Einstellungen zurückgesetzt. Diese Nebenwirkung kann indirekt auftreten. Fe als Folge der Änderung des verknüpften Datenmodells in einer Weise, wie diese Methode aufgerufen wird, nachdem Eigenschaften festgelegt wurden.
quelle
Die Option ist nicht erforderlich. Stellen Sie einfach die bevorzugte Breite der letzten Spalte auf das Maximum ein, und es wird der gesamte zusätzliche Platz beansprucht.
quelle
Dieser Code funktioniert für mich ohne setAutoResizeModes.
quelle
Verwenden Sie diesen Code. Es hat bei mir funktioniert. Ich habe über 3 Spalten nachgedacht. Ändern Sie den Schleifenwert für Ihren Code.
quelle