使JTextField与JTable列保持相同的大小

时间:2017-07-19 09:13:48

标签: java swing jtable jtextfield miglayout

我有一个有四列的JTable。在每个列的上方,我想要一个JTextField或类似的东西,目的是让输入过滤相应的列。让我们说清楚第二列被称为“名称”,如果你在第二个JTextField中写“John”,你应该过滤JTable以显示以John开头的名字,即。约翰;约翰尼,或者如果你写“约翰”,你可能会看到约翰;约翰尼;约翰娜。

我的问题主要不是过滤本身,而是如何将JTextFields的大小链接到列大小。虽然我可以在程序启动时显然具有相同的大小,但是如果用户调整其中一个JTable列,我希望JTextField自行调整(每次调整列的大小时,很可能需要调整几个TextField的大小,因为调整一列的大小会导致其他列调整为适合JTable大小)

我现在正在使用Netbeans GUI编辑器,但是一旦我编写了组件逻辑,我很可能会在MigLayout中完成所有操作,如果这有所不同的话。关于如何最好地实现这个的任何提示?

1 个答案:

答案 0 :(得分:0)

使用TableModelListener检查任何列的大小是否已更改:

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

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

    }

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

    }

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

    }

    @Override
    public void columnMarginChanged(ChangeEvent e) {
        TableColumn c = ((TableColumn) e.getSource());
        //some logic to resize the right textfield
        textfieldxyz.setWidt(c.getWidth());
    }

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

    }
});

现在您只需确定调整了哪个列并对其做出正确反应