2017-09-19 5 views
0

J'utilise JXTable qui a un setColumnControlVisible (true) qui affiche un bouton dans le coin supérieur droit au-dessus du défilement, nous pouvons afficher et masquer la colonne en appuyant dessus. Je veux me rappeler les changements quand l'application se rapproche, mais ne peut pas encore comprendre, Voici ce que j'ai essayé jusqu'à présent. Je vérifie le src de JxTable, mais n'a pas comment obtenir l'index de colonne ou le numéro de colonne qui est caché.Jtable affiche et masque la colonne et enregistre la configuration.

package paractice; 

import java.awt.BorderLayout; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.table.AbstractTableModel; 

import org.jdesktop.swingx.JXTable; 

public class TableTest extends JFrame{ 

    private static final long serialVersionUID = 1L; 
    private JXTable table; 

    public TableTest() { 
     setLayout(new BorderLayout()); 
     table = new JXTable(new model()); 
     //add(table.getTableHeader(), BorderLayout.NORTH); 
     add(new JScrollPane(table), BorderLayout.CENTER); 
     table.setColumnControlVisible(true); 
     setSize(700, 700); 


    } 

    public class model extends AbstractTableModel{ 

     String[] columns = {"column1", "column2", "column3", "column4", "column5"}; 

     @Override 
     public String getColumnName(int column) { 
      return columns[column]; 
     } 

     @Override 
     public boolean isCellEditable(int arg0, int arg1) { 
      return super.isCellEditable(arg0, arg1); 
     } 

     @Override 
     public void setValueAt(Object arg0, int row, int col) { 
      super.setValueAt(arg0, row, col); 
      fireTableCellUpdated(row, col); 
     } 

     public int getColumnCount() { 
      return columns.length; 
     } 

     public int getRowCount() { 
      return 0; 
     } 

     public Object getValueAt(int arg0, int arg1) { 
      return null; 
     } 

    } 

    public static void main(String args[]) { 
     TableTest test = new TableTest(); 
     test.setVisible(true); 
    } 

} 

Répondre

1

mais n'a pas comment obtenir l'indice de la colonne ou le numéro de colonne qui est caché.

Comparez le TableModel avec JTableHeader. Créez simplement une boucle simple pour vérifier tout le nom des colonnes de TableModel pour voir si la table contient cette colonne. Quelque chose comme:

for (int i = 0; i < model.getColumnCount(); i++) 
{ 
    Object name = model.getColumnName(); 

    TableColumn column = table.getColumn(name); 

    if (column == null) 
     // column is hidden do your processing 
} 

Alors la prochaine fois que vous affichez la table que vous pouvez obtenir les noms de toutes les colonnes cachées puis utilisez:

table.removeColumn(table.getColumn(name)); 
+0

Merci. une telle logique simple. –