7
votes

Comment créer une liste déroulante dans Java Swing avec la sélection de plusieurs articles?

Je suis au courant de jlist et jcombobox . J'ai besoin de la fonctionnalité de liste déroulante de la boîte déroulante avec plusieurs fonctionnalités de sélection que jlist fournit.

En effet, le contenu de la liste est trop énorme pour être affiché à l'aide d'une liste simple. J'ai également besoin de sélectionner plusieurs éléments, sinon j'aurais eu du contenu avec jcommobox .

Toute suggestion?


0 commentaires

4 Réponses :


9
votes

Lorsque vous utilisez Multi-Select, il vaut mieux utiliser une liste qu'une liste déroulante. En tant que métaphores de l'interface graphique, les gens s'attendent à ce qu'une boîte déroulante soit sélectionnée, alors que les listes peuvent être soit.

Le contenu de la liste est trop énorme pour être affiché à l'aide d'une liste simple

Placez le jlist dans un jscrollpane . Vous pouvez appeler SetVisiblerWCount (int) sur le jlist Pour spécifier le nombre de lignes à une heure doit être affichée.


0 commentaires

6
votes

Vous pouvez créer un rendu de cellule personnalisé pour le ComboBox et ajouter des cases à cocher à ces composants. Vous pouvez donc les vérifier et les décocher. Vous devez faire quelque chose comme ceci:

public class MyComboBoxRenderer implements ListCellRenderer {

    private String[] items;
    private boolean[] selected;

    public MyComboBoxRenderer(String[] items){
         this.items = items;
         this.selected = new boolean[items.lenght];
    }

    public Component getListCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int index) {
         // Create here a JLabel with the text
         // Create here a JCheckBox
         // Add them to a layoutmanager
         return this;
    }

    public void setSelected(int i, boolean flag)
    {
         this.selected[i] = flag;
    }

}


1 commentaires

Cette classe doit prolonger certains sous-types de composant afin de rendre le type de retour de getlistCellrendererComponent () correspondant, si vous voulez renvoyer ceci; . Si vous souhaitez retourner la marque que vous avez créée, c'est OK, l'original (donc je ne l'obtiens pas vraiment). Et où est-ce que ce SEselected () vient? Mieux pour poster tous les codes.



2
votes

Si vos données ont un caractère hiérarchique, envisagez le composant CLOP CLOP , décrit dans Annonce de la nouvelle table d'arborescence balançoire et dans ce Réponse . Voici le version de développement actuelle de l'API.


0 commentaires

1
votes

Pour atteindre la fonctionnalité décrite, j'ai finalement décidé de "abuser" le jmenubar et ajouter à lui plusieurs jcheckboxmenuitems . L'interface graphique correspond parfaitement parfaitement au but (au moins pour moi), il s'agit simplement de la manipulation de la citoyenne qui risque de devenir un peu ennuyeux.

(Enfin, j'ai défini une certaine logique de bit sur les éléments, puis peut me limiter à ne manipuler qu'un seul type d'événement)


0 commentaires