JTable设置列大小问题

时间:2011-04-25 05:48:42

标签: java swing jtable

我遇到了设置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 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

尝试将最小和最大宽度设置为800。和其他宽度,如果你找到它们。

答案 2 :(得分:0)

我相信列宽是相对的。所有800应该与所有100相同,但尝试将它们设置为不同的值。为了使它们更大,使桌子更宽。

答案 3 :(得分:-1)

为什么不使用:

 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 ...

答案 4 :(得分:-1)

如果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; }
我使用了现有表格的大小并增加了窗格的大小......

希望这会有所帮助......