Java JTable Einstellung Spaltenbreite



3 Answers

Mit JTable.AUTO_RESIZE_OFF die Tabelle nicht die Größe einer der Spalten für Sie, daher wird Ihre bevorzugte Einstellung verwendet. Wenn es Ihr Ziel ist, dass die Spalten standardmäßig die von Ihnen bevorzugte Größe haben, außer dass die letzte Spalte den Rest des JTable.AUTO_RESIZE_LAST_COLUMN ausfüllt, haben Sie die Möglichkeit, JTable.AUTO_RESIZE_LAST_COLUMN autoResizeMode zu JTable.AUTO_RESIZE_LAST_COLUMN Dies ist jedoch am effektivsten, wenn Sie mit TableColumn.setMaxWidth() anstelle von TableColumn.setPreferredWidth () für alle bis auf die letzte Spalte.

Sobald Sie AUTO_RESIZE_LAST_COLUMN sind, dass AUTO_RESIZE_LAST_COLUMN tatsächlich funktioniert, können Sie mit einer Kombination aus TableColumn.setMaxWidth() und TableColumn.setMinWidth() experimentieren.

java swing size jtable

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);

Das funktioniert gut, aber wenn die Tabelle maximiert ist, bekomme ich einen leeren Platz rechts von der letzten Spalte. Ist es möglich, die Größe der letzten Spalte beim Ändern der Größe an das Ende des Fensters anzupassen?

Ich habe die AUTO_RESIZE_LAST_COLUMN in Dokumenten gefunden, funktioniert aber nicht.

Edit: JTable ist in einem JScrollPane seine bevorzugte Größe ist eingestellt.




Verwenden Sie diese Methode

public static void setColumnWidths(JTable table, int... widths) {
    TableColumnModel columnModel = table.getColumnModel();
    for (int i = 0; i < widths.length; i++) {
        if (i < columnModel.getColumnCount()) {
            columnModel.getColumn(i).setMaxWidth(widths[i]);
        }
        else break;
    }

Oder erweitern Sie die JTable Klasse:

public class Table extends JTable {
    public void setColumnWidths(int... widths) {
        for (int i = 0; i < widths.length; i++) {
            if (i < columnModel.getColumnCount()) {
                columnModel.getColumn(i).setMaxWidth(widths[i]);
            }
            else break;
        }
    }
}

Und dann

table.setColumnWidths(30, 150, 100, 100);



fireTableStructureChanged();

wird das Größenänderungsverhalten voreinstellen ! Wenn diese Methode irgendwo in Ihrem Code aufgerufen wird, NACHDEM Sie die Größenänderungseigenschaften der Spalte festgelegt haben, werden alle Ihre Einstellungen zurückgesetzt. Dieser Nebeneffekt kann indirekt auftreten. Fe als Folge der Änderung des verknüpften Datenmodells in einer Weise, in der diese Methode aufgerufen wird, nachdem Eigenschaften festgelegt wurden.




Related