【问题标题】:JTable column widthJTable 列宽
【发布时间】:2013-06-19 19:45:25
【问题描述】:

这应该很容易解决,但我就是没看到。下面的 JPanel 只包含一个 ScrollPane(包含一个表格)和一个按钮。

我需要知道表格的实际列宽。 单击按钮确实显示了正确的值,但内部调用只为每列输出 75(默认值)。如何在此处的代码中获得正确的结果?

public MyPanel() { //JPanel

        setLayout(new BorderLayout());

        this.setBounds(0, 0, 1000, 250);

        table = new JTable(5,6);

        JScrollPane sp = new JScrollPane(table);

        this.add(sp, BorderLayout.CENTER);          


        JButton b = new JButton("Test");
            b.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    displayWidths(); //DOES WORK!
                }
            });
         this.add(b, BorderLayout.SOUTH);

         displayWidths(); //DOES NOT WORK!
}

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

【问题讨论】:

    标签: java swing jtable width


    【解决方案1】:

    按钮调用有效,因为您的面板/表格已实现(在屏幕上可见)。内联版本没有,因为您的表尚未实现。

    编辑

    现在有经过测试的代码:

    public class TestGetColumnWidths {
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    JFrame frame = new JFrame("Columns");
                    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    
                    final JTable table = new JTable(5, 6);
                    table.getTableHeader().addComponentListener(new ComponentAdapter() {
                        @Override
                        public void componentResized(ComponentEvent e) {
                            super.componentResized(e);
                            displayColumnWidths(table.getTableHeader());
                        }
                    });
                    JPanel panel = new JPanel(new BorderLayout());
                    panel.add(new JScrollPane(table));
    
                    frame.add(panel);
                    //frame.pack();
                    frame.setSize(1000, 250);
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
    
                private void displayColumnWidths(JTableHeader header) {
                    TableColumnModel model = header.getColumnModel();
    
                    for (int i = 0; i < model.getColumnCount(); i++) {
                        TableColumn column = model.getColumn(i);
                        System.err.println("column.getWidth(): " + column.getWidth());
                    }
                }
            });
        }
    }
    

    【讨论】:

    • 你知道怎么解决吗?
    • 还是默认值 :(
    • @user1703554 抱歉,我认为它可以与 addNotify 一起使用,但附近没有我的电脑。现在更新了可以使用的示例代码。
    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 2023-03-29
    • 2016-07-28
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 2010-10-06
    相关资源
    最近更新 更多