Проблема с размером столбца jtable set

у меня возникла проблема установки ширины столбца 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;
        }

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

спасибо

5 ответов


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

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

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


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


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

 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 Если вы не знаете заранее число итераций...


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

пример кода,


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

надеюсь, что это помогает...