JTable установить размер столбца проблема - PullRequest
6 голосов
/ 25 апреля 2011

У меня проблема с настройкой ширины столбца JTable.

Код ниже работает нормально:

TableColumn a =shipsAndOwnHitsTable.getColumnModel().getColumn(0);
a.setPreferredWidth(800);

Изменяет ширину первого столбца.

Однако, когда он помещен в цикл while или for, ничего не происходит:

        int index = 0;
        while (index < columnNum){
            TableColumn a =shipsAndOwnHitsTable.getColumnModel().getColumn(index);
            a.setPreferredWidth(800);
            index+=1;
        }

Этот код не работает, ничего не происходит с размерами столбцов, кто-нибудь может объяснить, почему? Если нет, то кто-нибудь может сказать мне, как установить одинаковую ширину строк и столбцов, т. Е. Я хочу, чтобы все ячейки в моей таблице были квадратными, независимо от размера таблицы (строк и столбцов).?

Спасибо

Ответы [ 5 ]

7 голосов
/ 25 апреля 2011

Следующий код работает нормально. Согласно моим комментариям, обратите внимание, что

  • setAutoResizeMode(JTable.AUTO_RESIZE_OFF) назывался
  • компонент таблицы встроен в JScrollPane, чтобы разрешить произвольный размер

Сравните его со своим кодом, и вы можете обнаружить свою проблему довольно скоро.

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.TableColumn;

public class TableColumnSizeTest {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

                // prepare table
                JTable table = new JTable(new String[][] {  
                                 { "Row 1 Col A", "Row 1 Col B" }, 
                                 { "Row 2 Col A", "Row 2 Col B" } }, 
                                 new String[] { "ColA", "ColB" });

                // add into scroll pane
                f.getContentPane().add(new JScrollPane(table));

                // turn off auto resize
                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

                // set preferred column widths
                int index = 0;
                while (index < 2) {
                    TableColumn a = table.getColumnModel().getColumn(index);
                    a.setPreferredWidth(10);
                    index++;
                }

                f.pack();

                f.setVisible(true);
            }
        });
    }
}
0 голосов
/ 02 сентября 2016

Я считаю, что ширина столбцов является относительной.Все 800 должны быть такими же, как все 100, но попробуйте установить для них разные значения.Чтобы сделать их все больше, сделайте сам стол шире.

0 голосов
/ 25 апреля 2011

Попробуйте также установить минимальную и максимальную ширину на 800. И другие ширины, если вы их найдете.

0 голосов
/ 25 апреля 2011

Если jTable находится в jScrollPane, вам также необходимо увеличить размер (ширину) jScrollPane ...

пример кода,

<code>
        int index = 0;
        int columnNum = 2;
        while (index < columnNum){
         TableColumn a=jTable1.getColumnModel().getColumn(index);<br>
         Dimension d = jTable1.getPreferredSize();
         d.width = d.width + 500;
          jTable1.setPreferredSize(d);
          jScrollPane1.setPreferredSize(d);
            index+=1;
        }
Я использовал размер существующей таблицы и увеличилразмер панели ...

Надеюсь, это поможет ...

0 голосов
/ 25 апреля 2011

Почему бы не использовать:

 int index = 0;

    while (index < columnNum){
        shipsAndOwnHitsTable.getColumnModel().getColumn(index).setPreferredWidth(800);
        index+=1;
    }

Также почему бы не изменить свой цикл на:

for(int index = 0; index < columnNum; index++){
   shipsAndOwnHitsTable.getColumnModel().getColumn(index).setPreferredWidth(800);// two lines of code less
}

Помните, что вы используете (рекомендуется) while-loop, если вы не знаетеколичество итераций заранее ...

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