1

在我的应用程序中,我将 aJTable与一些可调整大小的列一起使用。关闭时,我希望应用程序存储显示的列的大小。

我的问题是,即使我手动调整列大小,该getWidth()函数始终返回 75(默认值),无论列的实际大小如何。如果我用调试器查看TableColumn对象,它的最小尺寸是 15,它的最大尺寸是 2147483648,它的首选尺寸是 75,它的尺寸是 75。但它显示的尺寸显然不是 75!

如何获得列的实际大小?

获取宽度的代码:

        for(i=0;i<TableOpérations.getColumnCount();i++){
              tc=TableOpérations.getColumn(TableOpérations.getColumnName(i));

              width=tc.getWidth();
    }
4

1 回答 1

2

我没有看到你看到的行为。每次按下按钮时,以下程序都会显示正确的宽度。您必须显示另一个表或表列模型的列的宽度。

public class TableColumnTest extends JFrame {

    private JTable table;

    public TableColumnTest() {
        JPanel p = new JPanel();
        p.setLayout(new BorderLayout());
        table = new JTable(5, 4);
        p.add(new JScrollPane(table), BorderLayout.CENTER);
        JButton b = new JButton("Test");
        b.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                displayWidths();
            }
        });
        p.add(b, BorderLayout.SOUTH);
        add(p);
        pack();
    }

    private void displayWidths() {
        for (int i = 0; i < table.getColumnCount(); i++) {
            TableColumn column = table.getColumnModel().getColumn(i);
            System.out.println("Width of column " + i + " : " + column.getWidth());
        }
    }

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

            @Override
            public void run() {
                new TableColumnTest().setVisible(true);
            }
        });
    }
}
于 2012-09-23T08:17:34.530 回答