JTable设置列大小问题

Sah*_*wal 6 java swing jtable

我遇到了设置JTable列宽的问题.

下面的代码工作正常:

TableColumn a =shipsAndOwnHitsTable.getColumnModel().getColumn(0);
a.setPreferredWidth(800);
Run Code Online (Sandbox Code Playgroud)

它会更改第一列的宽度.

但是当置于while或for循环中时,没有任何反应:

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

此代码不起作用,列大小没有任何反应,有人可以解释原因吗?如果没有,有人可以告诉我如何将行和列宽度设置为相同,即我希望表格中的所有单元格都是正方形,而不管表格大小(行和列).

谢谢

How*_*ard 7

以下代码工作正常.根据我的评论,请注意

  • setAutoResizeMode(JTable.AUTO_RESIZE_OFF) 被称为
  • 表组件嵌入到a中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);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)