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

  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 :

  7. #7
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    salut,
    quelle jdk tu utilises, car je crois que la classe DropMode n'existe que depuis la 1.6 ( ou 6 si vous préférez )

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 61
    Par défaut
    j'utilise la version 5
    cela veut dire que le DnD n'existe que sur la version 6? excusez moi je suis débutante en java

  9. #9
    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
    Installe une version 6 car le Drag & Drop a été grandement amélioré pour java 6. Avant ce n'était pas aisé, et même maintenant ce n'est surement pas un sujet à mettre dans les mains d'une débutante.

  10. #10
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 61
    Par défaut
    Même débutante je me débrouille bien jusqu'à maintenant le seule obstacle qui j'ai rencontré dans le projet c'est ce Drag&Drop
    pour la version 6 je ne peux pas travailler avec car le client utilise la 5 ... donc il va falloir que je trouve une solution autre que le glisser déplacer ... je vais y réfléchir ...
    merci tout le monde ^^

  11. #11
    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
    Sinon tu trouveras des exemples de drag & drop à l'adresse suivante: http://www.java2s.com/Tutorial/Java/...raganddrop.htm

  12. #12
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 61
    Par défaut
    merci beaucoup sinok pour le site , un exemple bien complet mais je vois qu'il y a aussi l'importation de DropMode donc pas de chance tjrs la version 6 ...
    merci comme méme

  13. #13
    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
    Voici une version java 5 mais c'est beaucoup plus bricolage

    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
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
     
     
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.Rectangle;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.StringSelection;
    import java.awt.datatransfer.Transferable;
    import java.awt.datatransfer.UnsupportedFlavorException;
    import java.awt.dnd.DropTarget;
    import java.awt.dnd.DropTargetDragEvent;
    import java.awt.dnd.DropTargetDropEvent;
    import java.awt.dnd.DropTargetEvent;
    import java.awt.dnd.DropTargetListener;
    import java.io.IOException;
    import java.util.Vector;
     
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JRootPane;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.ListSelectionModel;
    import javax.swing.SwingUtilities;
    import javax.swing.TransferHandler;
    import javax.swing.table.DefaultTableModel;
     
    public class DrAndDrTest {
        private Point from, to;
        private int hotspot = 5; 
        protected Boolean before = null; 
        private Component oldGlassPane; 
        private JPanel glassPane = new JPanel() {
            public void paint(Graphics g) {
                g.setColor(Color.red);
                if (from == null || to == null)
                    return;
                int x1 = from.x;
                int x2 = to.x;
                int y1 = from.y;
     
                // line
                g.drawLine(x1 + 2, y1, x2 - 2, y1);
                g.drawLine(x1 + 2, y1 + 1, x2 - 2, y1 + 1);
     
                // right
                g.drawLine(x1, y1 - 2, x1, y1 + 3);
                g.drawLine(x1 + 1, y1 - 1, x1 + 1, y1 + 2);
     
                // left
                g.drawLine(x2, y1 - 2, x2, y1 + 3);
                g.drawLine(x2 - 1, y1 - 1, x2 - 1, y1 + 2);
            }
        };
     
        private JTable t;
        private int rowIndex;
     
        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);
            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.setDropTarget(new DropTarget(t, new DropTargetListener() {
     
                private void updateLine(Point pt) {
                    rowIndex = t.rowAtPoint(pt);
                       if(rowIndex<0){ 
     
                            t.clearSelection(); 
                        } else{ 
                            Rectangle bounds = new Rectangle(t.getLocation().x,rowIndex*t.getRowHeight(), t.getWidth() ,t.getRowHeight());
                            System.out.println(bounds);
                            if(pt.y<=bounds.y+hotspot){ 
                                from = new Point(bounds.getLocation().x+5,bounds.getLocation().y); 
                                to = new Point(from.x+bounds.width-10, from.y); 
                                before = Boolean.TRUE; 
                            } else if(pt.y>=bounds.y+bounds.height-hotspot){ 
                                from = new Point(bounds.x+5, bounds.y+bounds.height); 
                                to = new Point(from.x+bounds.width-10, from.y); 
                                before = Boolean.FALSE; 
                            } else{ 
                                from = to = null; 
                                before = null; 
                            } 
                            if(from!=null && to!=null){ 
                                from = new Point(SwingUtilities.convertPoint(t, from, glassPane).x+5,SwingUtilities.convertPoint(t, from, glassPane).y); 
                                to = new Point(SwingUtilities.convertPoint(t, to, glassPane).x-10,SwingUtilities.convertPoint(t, to, glassPane).y);
                                t.clearSelection(); 
                            } else 
                                t.getSelectionModel().setSelectionInterval(rowIndex, rowIndex); 
                        } 
     
                    glassPane.getRootPane().repaint();
                }
     
                public void dragEnter(DropTargetDragEvent dtde) {
                    JTable tree = (JTable) dtde.getDropTargetContext().getComponent();
                    Point location = dtde.getLocation();
     
                    JRootPane rootPane = tree.getRootPane();
                    oldGlassPane = rootPane.getGlassPane();
                    rootPane.setGlassPane(glassPane);
                    glassPane.setOpaque(false);
                    glassPane.setVisible(true);
     
                    updateLine(location);
                }
     
                public void dragOver(DropTargetDragEvent dtde) {
                    JTable tree = (JTable) dtde.getDropTargetContext().getComponent();
                    Point location = dtde.getLocation();
                    updateLine(location);
                }
     
                public void dropActionChanged(DropTargetDragEvent dtde) {
                }
     
                private void resetGlassPane(DropTargetEvent dte) {
                    JTable tree = (JTable) dte.getDropTargetContext().getComponent();
     
                    JRootPane rootPane = tree.getRootPane();
                    rootPane.setGlassPane(oldGlassPane);
                    oldGlassPane.setVisible(false);
                    rootPane.repaint();
                }
     
                public void dragExit(DropTargetEvent dte) {
                    resetGlassPane(dte);
                }
     
                public void drop(DropTargetDropEvent dtde) {
                    resetGlassPane(dtde);
                    // return super.importData(comp, t);
                    // On récupère l'emplacement du Drop
     
                    // On récupère la ligne de destinatop du drop
     
                    Point p = t.getMousePosition();
     
                    int dstRow = t.rowAtPoint(p);
                    // On récupère la donnée utile depuis l'objet de transfert
                    // (l'emplacement d'origine de la ligne à bouger)
                    int srcRow = 0;
                    try {
                        srcRow = Integer.parseInt((String) dtde.getTransferable()
                                .getTransferData(DataFlavor.stringFlavor));
                    } catch (UnsupportedFlavorException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
     
                    // on effectue les modifications sur la JTable
                    MyTableModel m = (MyTableModel) t.getModel();
     
                    if (dstRow < 0) {
                        dstRow = 0;
                    }
                    if (dstRow > m.getRowCount() - 1) {
                        dstRow = m.getRowCount() - 1;
                    }
     
                    m.moveRow(srcRow, dstRow);
                }
     
            }));
            // 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() { // 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; }
             */
     
            @Override
            public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
                // TODO Auto-generated method stub
                return super.canImport(comp, transferFlavors);
            }
     
            @Override
            public boolean importData(JComponent comp, Transferable t) {
                // TODO Auto-generated method stub
     
                // return super.importData(comp, t);
                // On récupère l'emplacement du Drop
                JTable table = (JTable) comp;
     
                // On récupère la ligne de destinatop du drop
     
                Point p = comp.getMousePosition();
     
                int dstRow = table.rowAtPoint(p);
                // 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) t
                            .getTransferData(DataFlavor.stringFlavor));
                } catch (UnsupportedFlavorException e) {
                    e.printStackTrace();
                    return false;
                } catch (IOException e) {
                    e.printStackTrace();
                    return false;
                }
     
                // on effectue les modifications sur la JTable
                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 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();
     
        }
    }

  14. #14
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 61
    Par défaut
    merciiiiiiiiiiiiii sinok je vais le tester je ne sais pas comment te remercier

+ 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