【问题标题】:Make JTextField keep same size as JTable column使 JTextField 保持与 JTable 列相同的大小
【发布时间】:2017-12-24 10:59:16
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以使用GridLayout,但您可能会发现制作自己的LayoutManagerJTableColumnModel 一起使用是一种更简单的解决方案

标签: java swing jtable jtextfield miglayout


【解决方案1】:

使用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

    }
});

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多