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

 Java Discussion :

JList dans une JTable


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut JList dans une JTable
    Bonjour à tous

    Débutant en java, je cherche à comprendre l'utilisation des Jtables et l'utilisation des modèles en lisant du code. J'ai trouvé un code qui me parait vraiment intéressant.
    Mais certaines choses sont difficiles à comprendre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class MyListEditor extends AbstractCellEditor implements TableCellEditor
    { 
    JList mlist;
     
    public MyListEditor()
    {
    mlist = new JList();
    }
     
    public Object[] getCellEditorValue() 
    {
    return ((DefaultListModel)mlist.getModel()).toArray();
    }
    Que cherche t-on a faire dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ((DefaultListModel)mlist.getModel()).toArray();
    }
    S'agit t-il d'un cast?

    De plus dans cette partie de code, pourquoi "caster" l'objet mlist JList ou n'ai-je pas compris? Il a été plus haut comme une JList et on le retrouve dans cette partie de code comme un tableau de string.

    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
    public Component getTableCellRendererComponent(JTable mtable, Object value,
    boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
    
    if(isSelected)
    setBackground(mtable.getSelectionBackground() );
    else
    setBackground(Color.white );
    String stmp;
    StringTokenizer st;
    int rowHight=mtable.getRowHeight() +mtable.getRowMargin()+1;
    int fold;
    
    String[] mlist = (String[]) value;
    
    
    fold = mlist.length ;
    Je mets l'ensemble du code pour voir le contexte.
    Ce code vous semble t-il un bon modèle pour un débutant? Ou vous semble t-il qu'il y aurait des choses à améliorer ?
    Merci de votre aide.

    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
    import javax.swing.*;
    import java.awt.*;
    import javax.swing.table.*;
     
    import java.util.*;
     
    import java.io.*;
    public class jtablejlist //extends JFrame
    {
     
    public void init()
    {
    Vector data = new Vector();
    Vector tmp = new Vector();
     
    String[] sdata ={"test1","test2"};
    tmp.addElement (sdata);
    tmp.addElement ("This is test1");
    data.addElement (tmp);
     
    tmp = new Vector();
    String[] sdata2 ={"stock1","stock2","stock3","stock4"};
    tmp.addElement (sdata2);
    tmp.addElement ("This is stocks");
    data.addElement (tmp);
     
     
    Vector cols = new Vector();
    cols.addElement ("col1");
    cols.addElement ("col2");
     
    JTable table = new JTable(data,cols);
    TableColumn column = table.getColumnModel().getColumn(0);
    MyListEditor area=new MyListEditor();
    // ROWHIGHT=table.getRowHeight() +table.getRowMargin()+1; 
    column.setCellEditor(area); 
    column.setCellRenderer(new MyCellRenderer ());
     
    JFrame frame = new JFrame();
    frame.getContentPane().add(new JScrollPane(table));
    frame.pack();
    frame.setVisible(true);
    }
     
    class MyListEditor extends AbstractCellEditor implements TableCellEditor
    { 
    JList mlist;
     
    public MyListEditor()
    {
    mlist = new JList();
    }
     
    public Object[] getCellEditorValue() 
    {
    return ((DefaultListModel)mlist.getModel()).toArray();
    }
     
    // This method is called when a cell value is edited by the user.
    public Component getTableCellEditorComponent(JTable table, 
    Object value, boolean isSelected, int row,int column) 
    { 
    mlist.setListData((Object[])value);
    return mlist;
    }
     
    }
     
    class MyCellRenderer extends JList implements TableCellRenderer 
    {
    public MyCellRenderer(){
    super();
    }
    public Component getTableCellRendererComponent(JTable mtable, Object value,
    boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
     
    if(isSelected)
    setBackground(mtable.getSelectionBackground() );
    else
    setBackground(Color.white );
    String stmp;
    StringTokenizer st;
    int rowHight=mtable.getRowHeight() +mtable.getRowMargin()+1;
    int fold;
     
    String[] mlist = (String[]) value;
     
     
    fold = mlist.length ;
     
    //adjust row height
    if(mtable.getRowHeight(rowIndex)!=fold*rowHight) //otherwise, the save dialog couldn't show normally 
    mtable.setRowHeight(rowIndex, fold*rowHight); 
    setListData((String[])value);
     
    return this;
    } 
    }
    public static void main(String[] args)
    {
    jtablejlist jj =new jtablejlist();
    jj.init();
    }
     
    }

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Davhippo Voir le message
    Que cherche t-on a faire dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ((DefaultListModel)mlist.getModel()).toArray();
    }
    On prends mlist (qui est une JList), on récupère son modèle (getModel), on cast en DefaultListModel car on suppose que le modèle est de ce type, et on appelle toArray sur ce modèle, ce qui retourne un tableau avec tous les éléments contenu dans la JList.



    De plus dans cette partie de code, pourquoi "caster" l'objet mlist JList ou n'ai-je pas compris?
    Il n'y a pas de cast. mlist est une variable utilisé dans une méthode du renderer qui n'a rien à voir avec le champ utilisé dans l'Editor. Elles ont juste le même nom, mais sont distinct car dans deux contextes différents.



    Ce code vous semble t-il un bon modèle pour un débutant? Ou vous semble t-il qu'il y aurait des choses à améliorer ?
    Merci de votre aide.
    Non, il est erroné. Ton Editor retourne la liste des valeurs présentes dans la JList, alors que ce qu'on attends naturellement de lui, c'est de présenter ces valeur pour que l'utilisateur en choisisse 1.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut
    Merci pour la réponse.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/04/2012, 09h08
  2. Jlist dans une Jtable
    Par Arnich dans le forum Composants
    Réponses: 2
    Dernier message: 15/02/2008, 13h05
  3. integrer une jList dans une jTable
    Par amelA dans le forum Composants
    Réponses: 1
    Dernier message: 17/05/2007, 11h37
  4. Insertion des boutons et des images dans une JTable
    Par anouar dans le forum Composants
    Réponses: 2
    Dernier message: 17/11/2005, 20h23
  5. [JTable] couleur de sélection dans une JTable
    Par spoutyoyo dans le forum Composants
    Réponses: 7
    Dernier message: 06/12/2004, 11h43

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