簡體   English   中英

JTable列寬

[英]JTable column width

這應該很容易解決,但是我看不到。 下面的JPanel僅包含一個ScrollPane(包含一個表)和一個Button。

我需要知道表格的實際列寬。 單擊該按鈕確實顯示了正確的值,但是內部調用只為每列輸出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());
        }
}

由於您的面板/表格已實現(在屏幕上可見),因此通過按鈕進行的​​呼叫有效。 內聯版本沒有,因為您的表尚未實現。

編輯

現在帶有經過測試的代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM