2017-07-19 76 views
0

我有一個四列的JTable。在每個這些列的上方,我都需要一個JTextField或類似的東西,目的是讓輸入過濾器顯示相應的列。假設第二列名爲「Names」,如果在第二個JTextField中編寫「John」,則應該過濾JTable以顯示以John開頭的名稱,即。約翰;約翰尼,或者如果你寫「約翰」,你可能會看到約翰;約翰尼;約翰娜。使JTextField與JTable列保持相同的大小

我的問題主要不是過濾本身,而是如何將JTextFields的大小鏈接到列大小。雖然程序啓動時顯然具有相同的大小,但如果用戶調整其中一個JTable列的大小,我希望JTextField能夠自行調整(很可能每次調整列的大小時都必須調整幾個TextField的大小,因爲調整其中一列導致其他列調整爲適應JTable大小)

我現在使用Netbeans GUI編輯器,但是一旦我編寫了組件邏輯,我很可能會在MigLayout中完成所有操作,如果有所作爲。有關如何最好地實現這一點的任何提示?

+0

你可以使用'GridLayout' ,但是你可能會發現自己製作的'LayoutManager'可以和'JTable'的'ColumnModel'一起工作,這是一個更簡單的解決方案 – MadProgrammer

回答

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 

    } 
}); 

現在你只需要確定哪個柱調整和應對得當