如何覆盖已经创建的JTable方法

时间:2015-09-18 23:23:42

标签: java swing

我有很多JTable,但他们使用另一个公共类填充数据。我已经通过它的构造函数传递了整个JTable。确实很好。现在由于某种原因,我需要覆盖一些函数...所以我会在填充数据之前做到....

@Override
public boolean getScrollableTracksViewportWidth() {
}
@Override
public void doLayout() {
}
@Override
public void columnMarginChanged(ChangeEvent e) {        
}

但我的JTable对象已经创建,已经通过了...我不能像这样覆盖......

new JTable(1,5){
    @Override
    public void columnMarginChanged(ChangeEvent e) {        
    }
}

可能是它如此简单的基本...我不知道如何覆盖已经创建的组件对象的基本功能......

1 个答案:

答案 0 :(得分:0)

我设计了一个功能......现在它正在解决我的问题......

 void getAutoResizeTable(final JTable table) {

    table.getColumnModel().addColumnModelListener(new TableColumnModelListener() {
        @Override
        public void columnSelectionChanged(ListSelectionEvent lse) {
        }

        @Override
        public void columnAdded(TableColumnModelEvent tcme) {
        }

        @Override
        public void columnRemoved(TableColumnModelEvent tcme) {
        }

        @Override
        public void columnMoved(TableColumnModelEvent tcme) {
        }

        @Override
        public void columnMarginChanged(ChangeEvent ce) {
            TableColumn resizingColumn = table.getTableHeader().getResizingColumn();
            if (resizingColumn != null) {
                resizingColumn.setPreferredWidth(resizingColumn.getWidth());
            }
            if (hasExcessWidth(table)) {
                table.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
            } else {
                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            }

        }

        protected boolean hasExcessWidth(JTable table) {
            return table.getPreferredSize().width < table.getParent().getWidth();
        }

    });

}