我有一个有四列的JTable。在每个列的上方,我想要一个JTextField或类似的东西,目的是让输入过滤相应的列。让我们说清楚第二列被称为“名称”,如果你在第二个JTextField中写“John”,你应该过滤JTable以显示以John开头的名字,即。约翰;约翰尼,或者如果你写“约翰”,你可能会看到约翰;约翰尼;约翰娜。
我的问题主要不是过滤本身,而是如何将JTextFields的大小链接到列大小。虽然我可以在程序启动时显然具有相同的大小,但是如果用户调整其中一个JTable列,我希望JTextField自行调整(每次调整列的大小时,很可能需要调整几个TextField的大小,因为调整一列的大小会导致其他列调整为适合JTable大小)
我现在正在使用Netbeans GUI编辑器,但是一旦我编写了组件逻辑,我很可能会在MigLayout中完成所有操作,如果这有所不同的话。关于如何最好地实现这个的任何提示?
答案 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
}
});
现在您只需确定调整了哪个列并对其做出正确反应