2017-07-19 2 views
0

J'ai un JTable avec quatre colonnes. Au-dessus de chacune de ces colonnes, je veux un JTextField ou quelque chose de similaire, avec l'intention de faire en sorte que l'entrée filtre la colonne correspondante. Disons pour plus de clarté que la deuxième colonne s'appelle "Names", si vous écrivez "John" dans le second JTextField vous êtes censé filtrer le JTable pour montrer les noms qui commencent par John, ie. John; Johnny, ou si vous écrivez "Joh" vous pourriez voir John; Johnny; Johanna.Rendre JTextField conserver la même taille que la colonne JTable

Mon problème n'est pas principalement le filtrage en lui-même mais plutôt comment lier la taille des JTextFields à la columnize. Bien que je puisse évidemment avoir la même taille au démarrage du programme, je veux que les JTextField s'ajustent automatiquement si l'utilisateur redimensionne l'une des colonnes JTable (il est probable que plusieurs TextFields doivent être redimensionnés chaque fois que vous redimensionnez une colonne, comme le J'utilise l'éditeur d'interface graphique Netbeans pour l'instant mais une fois que j'ai écrit la logique du composant, je ferai très probablement tout cela dans MigLayout, si cela fait une différence. Des conseils sur la meilleure façon de mettre en œuvre cela?

+0

Vous pouvez utiliser un 'GridLayout' , mais vous pourriez trouver votre propre 'LayoutManager' qui fonctionne avec' ColumnModel' de 'JTable' une solution plus facile – MadProgrammer

Répondre

0

utiliser un TableModelListener pour vérifier si la taille d'une colonne ont été changés:

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 

    } 
}); 

maintenant vous suffit de déterminer la colonne a été redimensionnée et réagir correctement