Java jTable столбцы не меняются, чтобы соответствовать содержимому при запуске приложения - PullRequest
0 голосов
/ 20 октября 2018

На основе https://bosmeeuw.wordpress.com/2011/08/07/java-swing-automatically-resize-table-columns-to-their-contents/ Я создал приложение JFrame, которое отображает таблицу (jTable).

Данные заполняются автоматически из файла после вызова 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);

1 Ответ

0 голосов
/ 21 октября 2018
    jTable_ConnectionsDetails.getModel().addTableModelListener(new TableModelListener() {
        public void tableChanged(TableModelEvent e) {
            ColumnsAutoSizer.sizeColumnsToFit(jTable_ConnectionsDetails);

Хорошо, похоже, вы автоматически изменяете размер столбцов при каждом изменении данных.

Когда я дважды щелкаю по любой ячейке, а затем щелкаю по любой другой ячейке, столбцы меняют размер отличнокак и ожидалось.

Каждый раз, когда вы редактируете ячейку, значение сохраняется и генерируется TableModelEvent для вышеуказанного кода.

Данные заполняются автоматически изфайл после initComponents () вызывается.

Итак, вы проверили, выполняется ли код слушателя сверху?

Если он НЕ выполняется, то вам нужно вручную вызвать ColumnsAutoResizer method.

Если он выполнен, то это может быть проблема синхронизации, потому что GUI еще не виден.Попробуйте обернуть код в SwingUtilities.invokeLater(...), чтобы код был добавлен в конец потока диспетчеризации событий (EDT), и он будет выполнен после того, как GUI станет видимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...