12
votes

Jtalle cache-cache et spectacle

Je veux ajouter des colonnes à une table (balançoire JTable). Certains d'entre eux auront une taille par défaut (par exemple 250), d'autres seront cachés (leur taille sera donc 0). J'utilise ce code: xxx

Le problème est lorsque la table est affichée, toutes les colonnes sont affichées (aucune n'est cachée) et leur taille n'est pas 250 mais elles ont toutes la même taille. < / p>

Comment puis-je obtenir l'effet recherché?


1 commentaires

Veuillez consulter la réponse de Swing-Genius Stanislavl ici: cache-colonne-in-jtalible-temporaire


6 Réponses :


16
votes

Je pense que vous avez appelé vos méthodes de manière incorrecte, lorsque vous souhaitez masquer une colonne, vous définirez xxx

mais dans votre code, vous le faites lorsque vous souhaitez afficher une colonne qui est Exactement opposé.

Il n'est pas nécessaire d'appeler cette méthode "SetWidth" sur une tablechette, lisez SETWIDTH # TableMUN (int) .


1 commentaires

Salut, colonne.sepreferredwidth (0); n'est pas nécessaire. J'ai ajouté: colonne.setsizable (faux); Pour éviter de dérouler lors du redimensionnement de la colonne à gauche.



13
votes

JTABLE # REMOVECOLUMN Supprimer la colonne uniquement de la vue JTAble, plus dans ce exemple


1 commentaires

Merci, ce n'est pas la solution parfaite parce qu'elle manque la position ordonnée dans l'exemple mais je l'ai réparée.



7
votes

au lieu de réinventer la roue, vous pourriez envisager d'utiliser jxttable (dans the Swingx Project ) qui prend en charge cachée Les colonnes, COMLETETE avec une commande d'assurance-emploi pour permettre aux utilisateurs de les cacher / leur montrer de manière dynamique - et un groupe d'autres tructions utiles :).


0 commentaires

0
votes
    HashMap<String,TableColumn> hashMap_columns = new HashMap<String,TableColumn>();

    DefaultTableColumnModel defaultTableColumnModel = (DefaultTableColumnModel)jtable.getColumnModel();

    Enumeration<TableColumn> enumeration = defaultTableColumnModel.getColumns();

    while (enumeration.hasMoreElements())
    {
           TableColumn tableColumn = enumeration.nextElement();

           hashMap_columns.put((String)tableColumn.getIdentifier(),tableColumn);

    }


    public void setColumnVisible(String identifier, boolean setVisible)
    {
            TableColumn tableColumn = hashMap_columns.get(identifier);

            if (setVisible)
            {
                // using a sorted map removes the need to check column index/position
                SortedMap<Integer,TableColumn> sortedMap = new TreeMap<Integer,TableColumn>();

                // retreive all visible columns 
                Enumeration<TableColumn> enumeration = defaultTableColumnModel.getColumns();

                while (enumeration.hasMoreElements())
                {
                    TableColumn column = enumeration.nextElement();

                    sortedMap.put(column.getModelIndex(),column);
                }

                // add the column of interest to the sorted map
                sortedMap.put(tableColumn.getModelIndex(),tableColumn);

                // remove all visible columns
                for (TableColumn column: sortedMap.values())
                {
                    defaultTableColumnModel.removeColumn(column);
                }

                // add all previously visible columns as well as the column of interest
                for (TableColumn column: sortedMap.values())
                {
                    defaultTableColumnModel.addColumn(column);
                }
            }
            else
            {
                defaultTableColumnModel.removeColumn(tableColumn);
            }
        }

0 commentaires

6
votes

Essayez ceci quelque chose comme ceci par exemple: xxx

C'est la meilleure façon de cacher une colonne.


2 commentaires

Salut les gars, ne me votez pas négatif si vous ne direz pas pourquoi ma réponse est fausse. Un post une réponse similaire à une autre question très similaire et il a été élu. Mon chemin fonctionne bien quand même, essayez-le.


Très probablement, les bowvotes étaient dues à la réponse étant de 3 ans de retard. Cela peut aller bien, mais pas lorsque la réponse n'est qu'une élaboration de la réponse acceptée de 3 ans.



0
votes
public class TableColumnHider {

    private final JTable table;
    private final TableColumnModel tcm;
    private final Map hiddenColumns;

    public TableColumnHider(JTable table) {
        this.table = table;
        tcm = table.getColumnModel();
        hiddenColumns = new HashMap();
    }

    public void hide(String columnName, String keySig) {
        int index = tcm.getColumnIndex(columnName);
        TableColumn column = tcm.getColumn(index);
        hiddenColumns.put(columnName, column);
        hiddenColumns.put(keySig + columnName, new Integer(index));
        tcm.removeColumn(column);
    }

    public void show(String columnName, String keySig) {
        Object o = hiddenColumns.remove(columnName);
        if (o == null) {
            return;
        }
        tcm.addColumn((TableColumn) o);
        o = hiddenColumns.remove(keySig + columnName);
        if (o == null) {
            return;
        }
        int column = ((Integer) o).intValue();
        int lastColumn = tcm.getColumnCount() - 1;
        if (column < lastColumn) {
            tcm.moveColumn(lastColumn, column);
        }
    }
}

0 commentaires