Java jTable列未调整大小以适应应用程序开始时的内容

Java jTable列未调整大小以适应应用程序开始时的内容,java,swing,jtable,Java,Swing,Jtable,基于 我创建了一个显示表格(jTable)的JFrame应用程序 调用initComponents()后,将从文件中自动填充数据。 它只是一个只显示的应用程序 当应用程序启动时,它以默认宽度显示包含数据的列 当我双击任何单元格,然后单击任何其他单元格时,列的大小会按预期调整 我希望应用程序在启动时显示调整大小以适应内容的列 请帮忙 我的班级代码部分如下: public callA() { setExtendedState(JFrame.MAXIMIZED_BOTH);

基于 我创建了一个显示表格(jTable)的JFrame应用程序

调用initComponents()后,将从文件中自动填充数据。 它只是一个只显示的应用程序

当应用程序启动时,它以默认宽度显示包含数据的列

当我双击任何单元格,然后单击任何其他单元格时,列的大小会按预期调整

我希望应用程序在启动时显示调整大小以适应内容的列

请帮忙

我的班级代码部分如下:

public callA() {
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        initComponents();

            readConnectionsXML();

    }
jTable声明:

jTable_ConnectionsDetails.setAutoCreateRowSorter(true);
        jTable_ConnectionsDetails.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Connection Name", "Conn Type", "Host", "Port", "Service Name", "User", "profilename", "Password", "desc"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        jTable_ConnectionsDetails.setCellSelectionEnabled(true);
        jTable_ConnectionsDetails.getModel().addTableModelListener(new TableModelListener() {
            public void tableChanged(TableModelEvent e) {
                ColumnsAutoSizer.sizeColumnsToFit(jTable_ConnectionsDetails);
            }
        });
        jScrollPane_ConnectionsDataTable.setViewportView(jTable_ConnectionsDetails);
好的,每次更改数据时,您都会自动调整列的大小

当我双击任何单元格,然后单击任何其他单元格时,列的大小会按预期调整

每次编辑单元格时,都会保存值并生成TableModelEvent,以执行上述代码

调用initComponents()后,将从文件中自动填充数据

那么,您是否验证执行了上面的侦听器代码

如果未执行,则需要手动调用
ColumnsAutoResizer
方法


如果它被执行,那么它可能是一个时间问题,因为GUI还不可见。尝试将代码包装在
SwingUtilities.invokeLater(…)
中,以便将代码添加到事件调度线程(EDT)的末尾,并在GUI可见后执行。

我将数据添加为-
ConnectionTablemodel.addRow(新对象[]{Reference\u Element.getAttribute(“名称”)、cElement_数据库类型、cElement_主机、cElement_端口、cElement_数据库名称、cElement_用户、cElement_密码、cElement_密码、cElement_连接URL})
要更快地获得更好的帮助,请将或作为问题的答案发布。
    jTable_ConnectionsDetails.getModel().addTableModelListener(new TableModelListener() {
        public void tableChanged(TableModelEvent e) {
            ColumnsAutoSizer.sizeColumnsToFit(jTable_ConnectionsDetails);