用户更改后如何获取Jtable的列宽

时间:2019-05-28 15:39:43

标签: java jtable column-width

我想知道在用户更改列宽后如何获取它,以便我可以将其保存下来。

在搞乱之后,我想出了这种方法,但这并不完美。如果用户实际上没有通过单击列中的某一行来选择列,则所选列为-1,因此会引发错误,因此我使用if语句来防止这种情况。

下一个问题是,如果我选择一列然后更改宽度,它会在我更改列时起作用并打印出宽度,但是如果我选择说第3列,然后继续更改第2列宽度而不在行中选择在第2列中,当我更改第2列时,它将继续吐出第3列的宽​​度。因此,使用select方法可以按预期方式工作,但是必须有一种更好的方法来获得第i列的宽度改变。

有什么想法吗?

jt.getColumnModel().addColumnModelListener(new TableColumnModelListener() {

        public void columnAdded(TableColumnModelEvent e) {
            // TODO Auto-generated method stub

        }

        public void columnRemoved(TableColumnModelEvent e) {
            // TODO Auto-generated method stub

        }

        public void columnMoved(TableColumnModelEvent e) {
            // TODO Auto-generated method stub

        }

        public void columnMarginChanged(ChangeEvent e) {
            int col = jt.getSelectedColumn();
            if (col >= 0) {
                TableColumn tc = jt.getColumnModel().getColumn(col);
                System.out.println(tc.getWidth());
            }
        }

        public void columnSelectionChanged(ListSelectionEvent e) {
            // TODO Auto-generated method stub

        }

    });

2 个答案:

答案 0 :(得分:0)

您可以尝试将[0.99 , 0.67, 0.54]的源转换为ChangeEvent

有空的时候,在TableColumn中尝试以下操作...

TableColumnModelListener

答案 1 :(得分:0)

一段时间后,我设法找到了解决方案,但忘了分享。每次释放鼠标以调整表头大小时,我都会存储所有列宽。

jt.getTableHeader().addMouseListener( new MouseAdapter() {
        
        public void mouseReleased(MouseEvent arg0){
            for(int i=0;i<jt.getColumnModel().getColumnCount();i++ ) {
                TableColumn column = jt.getColumnModel().getColumn(i);
                int tableColWidth = column.getWidth();
                String colHeader = (String) column.getHeaderValue();
                
                //Store the column Header with the column width
            }
        }
    });