IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Glisser-déplacer d'un row ?


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 61
    Par défaut Glisser-déplacer d'un row ?
    bonjours,
    j'ai un jtable à plusieurs lignes où l'ordre des lignes est important alors je dois faire des déplacements des lignes pour obtenir l'ordre voulu... pour cela je veux savoir s'il y a possibilité de faire des glisser/déplacer avec les lignes d'une jtable , et comment on le fait?
    merci d'avance

  2. #2
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    Je ne sais pas si c'est possible...
    Tu pourrais aussi avoir une colonne dans la table qui contient un identifiant unique pour chaque ligne, après tu tries la table selon cette colonne (et si tu utilises JXTable, il suffit de cliquer sur le titre de colonne) : plus besoin de déplacer les lignes toi-même.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 61
    Par défaut
    Merci fraco pour votre réponse

    mais il me faut vraiment le drag&drop des lignes je vais vous expliquer:

    l'utilisateur remplis le jtable ligne par ligne ... aprés un moment il constate qu'il a mal placer une ligne , alors pour 80 lignes saisie il faut qu'il supprime tout et recommencer à 0 et ce n'est pas pratique ... alors l'unique solution c'est de faire déplacer la ligne voulue (il n ya pas un critère pour le triage des lignes seul l'utilisateur sais l'ordre d'après ses documents)

    pour le drag& drop j'ai cherché sur le net je n'ai rien trouvé ... même la doc de sun elle n'est pas trop claire ...

    Merci si quelqu'un pourrait-il me fournir un exemple je vous serais très reconnaissante ^^

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    La doc de Sun est relativement claire je trouve, elle explique pas à pas les éléments nécessaires à la mise en place du drag & drop en java 6.

    Par contre tu ne trouveras pas d'exemples tout cuits sur le net, le mieux est de prendre le tuto Sun dès la base, ce n'est pas très dur dans l'ensemble.

    Voilà une exemple vite fait qui marche, j'ai essayé de commenter un poil. A toi de l'adapter à ton besoin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
     
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.StringSelection;
    import java.awt.datatransfer.Transferable;
    import java.awt.datatransfer.UnsupportedFlavorException;
    import java.io.IOException;
    import java.util.Vector;
     
    import javax.swing.DropMode;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.ListSelectionModel;
    import javax.swing.TransferHandler;
    import javax.swing.table.DefaultTableModel;
     
     
    public class DrAndDrTest {
     
     
        public DrAndDrTest() {
            String[] dataRow ={"1234","1234","1234","1234","1234"};
            String[] dataRow2 ={"4567","4567","4567","4567","4567"};
            String[][] datas = new String[5][]; 
            for(int i = 0 ; i< 5; i++) {
                if( i%2 == 1 ) {
                    datas[i]=dataRow;
                } else {
                    datas[i]=dataRow2;
                }
            }
            MyTableModel m = new  MyTableModel(datas,dataRow);
            JTable t  =new JTable(m);
            t.setRowSelectionAllowed(true);
            t.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            // On met en place le D&D sur la JTable
            t.setDropMode(DropMode.INSERT_ROWS);
            t.setDragEnabled(true);
            t.setTransferHandler(new MyTransfertHandler());        
            t.setFillsViewportHeight(true);
     
            JFrame f = new JFrame();
            f.add(new JScrollPane(t));
            f.setSize(400, 300);
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        }
     
        class MyTableModel extends DefaultTableModel {
     
            public MyTableModel() {
                super();
                // TODO Auto-generated constructor stub
            }
     
            public MyTableModel(int rowCount, int columnCount) {
                super(rowCount, columnCount);
                // TODO Auto-generated constructor stub
            }
     
            public MyTableModel(Object[] columnNames, int rowCount) {
                super(columnNames, rowCount);
                // TODO Auto-generated constructor stub
            }
     
            public MyTableModel(Object[][] data, Object[] columnNames) {
                super(data, columnNames);
                // TODO Auto-generated constructor stub
            }
     
            public MyTableModel(Vector columnNames, int rowCount) {
                super(columnNames, rowCount);
                // TODO Auto-generated constructor stub
            }
     
            public MyTableModel(Vector data, Vector columnNames) {
                super(data, columnNames);
                // TODO Auto-generated constructor stub
            }
     
            /** Méthode permettant de modifier l'emplacement d'une ligne dans une JTable (codée à la va vite en utilisant les interne de DefaultTableModel ce qui n'est pas forcément top top)
             * 
             * @param rowIndexSrc La ligne d'origine de l'entrée à bouger
             * @param rowIndexDst La ligne de destination de l'entrée à bouger
             */
            public void moveRow(int rowIndexSrc, int rowIndexDst) {
                Vector r =(Vector) dataVector.get(rowIndexSrc);            
                removeRow(rowIndexSrc);            
                dataVector.add(rowIndexDst, r);            
                fireTableRowsInserted(rowIndexDst, rowIndexDst);            
            }
        }
     
     
        /**Implémentation De transfertHandler correspondant à la JTable. 
         * 
         * @author 
         *
         */
        class MyTransfertHandler extends TransferHandler {
            @Override
            public int getSourceActions(JComponent c) {
                // TODO Auto-generated method stub
                return TransferHandler.MOVE;
            }
     
     
     
            @Override
            protected Transferable createTransferable(JComponent c) {
     
                // on récupère la donnée qui nous intéresse (c'est a dire l'emplacement de la ligne que l'on veut bouger)
                //Puis on l'enveloppe dans un Objet héritant de transferable. (une StringSelection en l'occurence)
                JTable t = (JTable) c;
                StringSelection s = new StringSelection(String.valueOf(t.getSelectedRow()));
                return s;
            }
     
            public boolean canImport(TransferHandler.TransferSupport info) {
                // pour ne gérer que le drop et pas le paste
                if (!info.isDrop()) {
                    return false;
                }
     
                // On ne supporte que les chaines en entrée
                if (!info.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                    return false;
                }
     
                // On recherche l'emplacement du drop
                JTable.DropLocation dl = (JTable.DropLocation)info.getDropLocation();
     
                // On ne supporte que les emplacements de drop valides 
                return dl.getDropPoint() != null;
            }
     
            public boolean importData(TransferHandler.TransferSupport info) {
                // dans le cas ou l'on ne pourrait supporter l'import
     
                if (!canImport(info)) {            
                    return false;
                }
     
                // On récupère l'emplacement du Drop
                JTable.DropLocation dl = (JTable.DropLocation)info.getDropLocation();
     
                // On récupère la ligne de destinatop du drop
                int dstRow = dl.getRow();            
     
                // on récupère l'objet de transfert
                Transferable trans = info.getTransferable();
     
                // On récupère la donnée utile depuis l'objet de transfert (l'emplacement d'origine de la ligne à bouger)
                int srcRow;
                try {
                    srcRow = Integer.parseInt((String)trans.getTransferData(DataFlavor.stringFlavor));                
                } catch (UnsupportedFlavorException e) {
                    e.printStackTrace();
                    return false;
                } catch (IOException e) {
                    e.printStackTrace();
                    return false;
                }            
     
     
                // on effectue les modifications sur la JTable
               JTable table = (JTable) info.getComponent();
               MyTableModel m = (MyTableModel) table.getModel();
     
               if (dstRow < 0) {
                    dstRow = 0;
                }
               if (dstRow > m.getRowCount()-1) {
                    dstRow = m.getRowCount()-1;
                }
     
               m.moveRow(srcRow, dstRow);           
               return true;
            }
     
     
        }
        public static void main(String[] args) {
            new DrAndDrTest();
     
        }
    }

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 61
    Par défaut
    Merci infiniment sinok je vais le testé

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 61
    Par défaut
    re,
    sous eclipse il me donne des erreurs la 1ére c'est de l'importation de dropeMode :

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Deplacement fenêtre par glisser-déplacer
    Par Tips dans le forum Windows Forms
    Réponses: 1
    Dernier message: 08/09/2006, 16h25
  2. [VBA-E] réaliser un glisser-déplacer dans une listbox
    Par bandit boy dans le forum Macros et VBA Excel
    Réponses: 74
    Dernier message: 07/04/2006, 12h10
  3. [VB.NET] Glisser déplacer (DragDrop)
    Par Sytchev3 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/02/2006, 15h52
  4. Glisser-déplacer: Comment le "perçoit" windows
    Par méphistopheles dans le forum Windows
    Réponses: 2
    Dernier message: 07/09/2005, 10h47
  5. []Faire un glisser-déplacer qui marche.
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 06/09/2005, 20h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo