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

AWT/Swing Java Discussion :

[pratique][ergonomie] Pluri-choix dans une liste


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 149
    Points : 73
    Points
    73
    Par défaut [pratique][ergonomie] Pluri-choix dans une liste
    Bonjour,

    j'aimerais faire choisir à un utilisateur un ou plusieurs éléments dont j'ai la liste.
    J'aimerais aussi que ce soit pratique et simple d'utilisation.
    j'avais pensé à une JList avec sélection multiple, mais je pense que je perds le critère simple.

    Auriez vous des idées ?

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu peux passer éventuellement avec un système de listes: une montrant les choix, l'autre montrant la sélection et des boutons permettant d'ajouter et retirer des éléments de la listes des choix (et éventuellement permettre des choix multiples dans la première JList)
    Images attachées Images attachées  

  3. #3
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Une liste de checkboxes ?

  4. #4
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    moi je ferais une JTable.

    pourquoi?

    les deux liste, une complete et une des selectioner c'est pas toujours possible (manque de la place?)

    une JList qui utilise un JCheckBox comme Renderer ca va poser des probleme parce qu'un Renderer n'est pas un vrai composant et il repond pas a la souris.

    voila un rapide exemple

    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
     
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JScrollPane;
    import java.awt.EventQueue;
     
    /**
     * Created by IntelliJ IDEA.
     * User: bebe
     */
    public class MyEasyList {
     
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    JFrame f = new JFrame("Please select...");
                    JList myList = new JList(new MyListModel());
                    myList.setCellRenderer(new MyListCellRenderer());
                    f.add(new JScrollPane(myList));
                    f.pack();
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    f.setLocationRelativeTo(null);
                    f.setVisible(true);
                }
            });
        }
    }
    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
     
    import javax.swing.JCheckBox;
    import javax.swing.ListCellRenderer;
    import javax.swing.JList;
    import java.awt.Component;
     
    /**
     * Created by IntelliJ IDEA.
     * User: bebe
     */
    public class MyListCellRenderer extends JCheckBox implements ListCellRenderer {
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            setText(String.valueOf(value));
            return this;  //To change body of implemented methods use File | Settings | File Templates.
        }
    }
    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
     
    import javax.swing.ListModel;
    import javax.swing.event.ListDataListener;
    import java.util.ArrayList;
    import java.util.Random;
    import java.text.MessageFormat;
     
    /**
     * Created by IntelliJ IDEA.
     * User: bebe
     */
    public class MyListModel implements ListModel {
     
        private ArrayList<String> model = null;
        public MyListModel() {
            model = new ArrayList<String>();
            Random r = new Random();
            for ( int i = 0; i<20; i++) {
                int r1 = r.nextInt(10);
                int r2 = r.nextInt(10);
     
                model.add(MessageFormat.format("{0} * {1} == {2} ", r1, r2, r1 * r2));
            }
        }
     
        public int getSize() {
            return model.size();  //To change body of implemented methods use File | Settings | File Templates.
        }
     
        public Object getElementAt(int index) {
            return model.get(index);  //To change body of implemented methods use File | Settings | File Templates.
        }
     
        /* not implemented */
        public void addListDataListener(ListDataListener l) {
            //To change body of implemented methods use File | Settings | File Templates.
        }
     
        /* not implemented */
        public void removeListDataListener(ListDataListener l) {
            //To change body of implemented methods use File | Settings | File Templates.
        }
    }
    (on peut chipoter pour detourner le probleme mais c'est pas tres propre)


    mais avec une JTable c'est tres simple.
    une colonne avec le JCheckBox et une autre avec le contenu
    tu affiche pas la grille de la JTable ni l'entete avec le titre...

    et dans ton model tu sait qu'est ce qu'est selectioner ou pas.

    comme par exemple
    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
     
    import javax.swing.*;
    import java.awt.EventQueue;
     
    /**
     * Created by IntelliJ IDEA.
     * User: bebe
     */
    public class MyEasyMultipleSelection {
     
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    JFrame f = new JFrame("Please select...");
                    JTable myTable = new JTable(new MyTableModel());
                    myTable.getColumnModel().getColumn(0).setMaxWidth(45);
                    myTable.setShowGrid(false);
                    f.add(new JScrollPane(myTable));
                    f.pack();
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    f.setLocationRelativeTo(null);
                    f.setVisible(true);
                }
            });
        }
    }
    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
     
    import javax.swing.event.TableModelListener;
    import javax.swing.table.TableModel;
     
    /**
     * Created by IntelliJ IDEA.
     * User: bebe
     */
    public class MyTableModel implements TableModel {
     
        private Class[] classNames = new Class[]{Boolean.class, String.class};
        private Object[][] myModel = new Object[][] { {false, "First choice"},
                {false, "Second choice"},
                {false, "Third choice"},
                {false, "Fourth choice"},
                {false, "Fifth choice"},
        };
     
        public int getRowCount() {
            return myModel.length;  //To change body of implemented methods use File | Settings | File Templates.
        }
     
        public int getColumnCount() {
            return myModel[0].length;  //To change body of implemented methods use File | Settings | File Templates.
        }
     
        public String getColumnName(int columnIndex) {
            /* a JList doesn't have titles*/
            return null;  //To change body of implemented methods use File | Settings | File Templates.
        }
     
        public Class<?> getColumnClass(int columnIndex) {
            return classNames[columnIndex];  //To change body of implemented methods use File | Settings | File Templates.
        }
     
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return columnIndex==0;  //To change body of implemented methods use File | Settings | File Templates.
        }
     
        public Object getValueAt(int rowIndex, int columnIndex) {
            return myModel[rowIndex][columnIndex];  //To change body of implemented methods use File | Settings | File Templates.
        }
     
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
            myModel[rowIndex][columnIndex] = aValue; //To change body of implemented methods use File | Settings | File Templates.
        }
     
        /* not implemented */
        public void addTableModelListener(TableModelListener l) {
            //To change body of implemented methods use File | Settings | File Templates.
        }
     
        /* not implemented */
        public void removeTableModelListener(TableModelListener l) {
            //To change body of implemented methods use File | Settings | File Templates.
        }
    }
    c'est simple je pense?

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Eventuellement une vraie JList avec des JCheckBox ça peut être jouable si on se base sur la JList éditable de Santosh Kumar avec les renderers et editors qui vont bien

    http://jroller.com/page/santhosh/200...able_no_jtable

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 149
    Points : 73
    Points
    73
    Par défaut
    merci à tous pour vos idées intéressantes!
    C'est vrai qu'une liste, ou une table, avec des cases à cocher, c'est vraiment simple et pratique !
    ( j'avais mis au point un système de combobox communiquants grace à des boutons, mais rien à voir avec ça)

    à bbclone qui illustre avec une partie de code.
    Je viens de regarder et c'est ce qu'il me fallait.

    Encore merci à tous

  7. #7
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Par liste de checkboxes je ne pensais pas à une JList de JCheckBoxes mais à un JPanel+GridLayout (ou BoxLayout) dans un JScrollPane.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2007, 18h19
  2. [MySQL] affichage automatique d'un champs suite à un choix dans une liste déroulante
    Par sanaa.ben dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/10/2006, 00h18
  3. Réponses: 2
    Dernier message: 01/08/2006, 23h24
  4. Réponses: 2
    Dernier message: 30/06/2006, 16h46
  5. [FORMULAIRE] affichage selon le choix dans une liste déroulante.
    Par gailup dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/06/2006, 14h58

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