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 :

JTable avec Lignes draggable


Sujet :

Composants Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 11
    Points : 6
    Points
    6
    Par défaut JTable avec Lignes draggable
    Bonjour,

    Je desirerai créer une JTable dont les lignes sont draggable afin d'en changer l'ordre comme il est possible avec les colonnes.

    Existe t'il un moyen a l'aider de la JTable?

    En vous remerciant d'avance pour l'intêret que vous me portez.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Points : 267
    Points
    267
    Par défaut
    Salut,

    Ben a mon avis si tu ajoute un MouseMotionListener sur ta table, quand le drag commence tu recupere la ligne selectionnée et quand le drag est terminé tu récupère la ligne à la position de l'event et tu change la ligne de position.

    voila ciao

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    J'ai un tableau avec 2 "header", comme excel. Mon Header pour les lignes se trouve dans un JScrollPane. A la selection d'un des elements de ma JScrollPane il faut que je recupére la ligne correspondante et que je puisse la draggué. Je ne sais pas si la maniere dont je procéde pour créer mon tableau et adequate pour ce que je recherche.

    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
    package temp;
     
    import java.awt.BorderLayout;
    import javax.swing.*;
    import javax.swing.table.*;
     
    import java.util.Vector;
     
     
    public class RowHeaderList {
     
        public static void main(String[] args) {
     
            DefaultListModel _mList = new DefaultListModel();
            DefaultTableModel _mData = new DefaultTableModel(0, 5);
     
            for (int i = 0 ; i<5 ; i++) {
     
            	_mList.addElement("Ligne " + i);
     
                Vector v = new Vector();
     
                for (int k = 0; k < 3; k++)
                    v.add(null);
     
                _mData.addRow(v);
            }
     
            JTable table = new JTable(_mData);
            JList rowHeader = new JList(_mList);
     
            LookAndFeel.installColorsAndFont(rowHeader, "TableHeader.background", "TableHeader.foreground", "TableHeader.font");
     
            rowHeader.setFixedCellHeight(table.getRowHeight());
            rowHeader.setCellRenderer(new RowHeaderRenderer());
     
            JScrollPane scrollPane = new JScrollPane(table);
     
            scrollPane.setRowHeaderView(rowHeader);
     
     
            JFrame testFrame = new JFrame("Test");
            testFrame.getContentPane().add(scrollPane, BorderLayout.CENTER);
            testFrame.pack();
            testFrame.setLocation(200, 100);
            testFrame.setVisible(true);
        }
    }
    et

    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
     
    package temp;
     
    import java.awt.Component;
    import java.awt.Insets;
    import javax.swing.ListCellRenderer;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.BorderFactory;
    import javax.swing.JList;
    import javax.swing.JTable;
    import javax.swing.UIManager;
    import javax.swing.BorderFactory;
    import javax.swing.border.Border;
    import javax.swing.plaf.BorderUIResource;
     
     
    class RowHeaderRenderer
        extends DefaultTableCellRenderer
        implements ListCellRenderer
    {
        protected Border noFocusBorder, focusBorder;
     
     
        public RowHeaderRenderer()
        {
            setOpaque(true);
            setBorder(noFocusBorder);
        }
     
        public void updateUI()
        {
            super.updateUI();
            Border cell = UIManager.getBorder("TableHeader.cellBorder");
            Border focus = UIManager.getBorder("Table.focusCellHighlightBorder");
     
            focusBorder = new BorderUIResource.CompoundBorderUIResource(cell, focus);
     
            Insets i = focus.getBorderInsets(this);
     
            noFocusBorder = new BorderUIResource.CompoundBorderUIResource
                 (cell, BorderFactory.createEmptyBorder(i.top, i.left, i.bottom, i.right));
     
            /* Alternatively, if focus shouldn't be supported:
     
            focusBorder = noFocusBorder = cell;
        
            */
        }
     
        public Component getListCellRendererComponent(JList list, Object value, 
            int index, boolean selected, boolean focused) 
        {
            if (list != null)
            {
                if (selected)
                {
                    setBackground(list.getSelectionBackground());
                    setForeground(list.getSelectionForeground());
                }
                else
                {
                    setBackground(list.getBackground());
                    setForeground(list.getForeground());
                }
     
                setFont(list.getFont());
     
                setEnabled(list.isEnabled());
            }
            else
            {
                setBackground(UIManager.getColor("TableHeader.background"));
                setForeground(UIManager.getColor("TableHeader.foreground"));
                setFont(UIManager.getFont("TableHeader.font"));
                setEnabled(true);
            }
     
            if (focused)
                setBorder(focusBorder);
            else
                setBorder(noFocusBorder);
     
            setValue(value);
     
            return this;
        }
     
        public Component getTableCellRendererComponent(JTable table, Object value,
                           boolean selected, boolean focused, int row, int column)
        {
            if (table != null)
            {
                if (selected)
                {
                    setBackground(table.getSelectionBackground());
                    setForeground(table.getSelectionForeground());
                }
                else
                {
                    setBackground(table.getBackground());
                    setForeground(table.getForeground());
                }
     
                setFont(table.getFont());
     
                setEnabled(table.isEnabled());
            }
            else
            {
                setBackground(UIManager.getColor("TableHeader.background"));
                setForeground(UIManager.getColor("TableHeader.foreground"));
                setFont(UIManager.getFont("TableHeader.font"));
                setEnabled(true);
            }
     
            if (focused)
                setBorder(focusBorder);
            else
                setBorder(noFocusBorder);
     
            setValue(value);
     
            return this;
        }
    }
    Merci d'avance.

Discussions similaires

  1. [JTable] Ajouter ligne avec moins de colonnes
    Par encours dans le forum Composants
    Réponses: 1
    Dernier message: 27/12/2011, 09h57
  2. [SWING] JTable avec nombre de ligne dynamique !
    Par MaxLaMenaX dans le forum Composants
    Réponses: 1
    Dernier message: 18/10/2010, 02h18
  3. Réponses: 3
    Dernier message: 17/09/2009, 15h26
  4. JTable avec premiere ligne de filtre
    Par GrooveRage dans le forum Composants
    Réponses: 1
    Dernier message: 21/06/2009, 15h15
  5. Selectionner une ligne de la JTable avec un bouton
    Par haffouff dans le forum Composants
    Réponses: 3
    Dernier message: 26/04/2007, 11h47

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