10
votes

JLIST Cliquez avec le bouton droit de la souris sur Afficher le menu (Utilisez, Drop, Annuler)

Je réconforte Internet pour cette réponse. J'ai une simple jlist avec des objets à l'intérieur. Lorsque je cliquez avec le bouton droit de la souris, je veux un menu sur la fenêtre contextuelle qui dit "Utiliser, déposer, annuler" ou quelque chose de cette nature. Cependant, je suis exclu.

Le code ci-dessous produira une simple jlist avec quelques articles à l'intérieur. J'ai essayé d'ajouter un clic droit dans le code mais cela ne fonctionne pas. Aide?

Voici ce que j'ai jusqu'à présent: xxx


0 commentaires

3 Réponses :


6
votes

Je ne sais pas ce que tu veux dire. Voici un code qui semble fonctionner comme vous spécifiez, mais en dehors de la prise de tout nombre de déclarations redondantes ou buggy, c'est à peu près ce que vous avez posté.

java.awt.event.MouseEvent[MOUSE_PRESSED,(31,22),absolute(39,72),button=3,modifiers=Meta+Button3,extModifiers=Button3,clickCount=1] on javax.swing.JList[,0,0,200x200,alignmentX=0.0,alignmentY=0.0,border=,flags=50331944,maximumSize=,minimumSize=,preferredSize=,fixedCellHeight=-1,fixedCellWidth=-1,horizontalScrollIncrement=-1,selectionBackground=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],selectionForeground=sun.swing.PrintColorUIResource[r=51,g=51,b=51],visibleRowCount=8,layoutOrientation=0]
Row: 1
java.awt.event.MouseEvent[MOUSE_PRESSED,(29,39),absolute(37,89),button=3,modifiers=Meta+Button3,extModifiers=Button3,clickCount=1] on javax.swing.JList[,0,0,200x200,alignmentX=0.0,alignmentY=0.0,border=,flags=50331944,maximumSize=,minimumSize=,preferredSize=,fixedCellHeight=-1,fixedCellWidth=-1,horizontalScrollIncrement=-1,selectionBackground=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],selectionForeground=sun.swing.PrintColorUIResource[r=51,g=51,b=51],visibleRowCount=8,layoutOrientation=0]
Row: 2
java.awt.event.MouseEvent[MOUSE_PRESSED,(36,65),absolute(468,192),button=3,modifiers=Meta+Button3,extModifiers=Button3,clickCount=1] on javax.swing.JList[,0,0,200x200,alignmentX=0.0,alignmentY=0.0,border=,flags=50331944,maximumSize=,minimumSize=,preferredSize=,fixedCellHeight=-1,fixedCellWidth=-1,horizontalScrollIncrement=-1,selectionBackground=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],selectionForeground=sun.swing.PrintColorUIResource[r=51,g=51,b=51],visibleRowCount=8,layoutOrientation=0]
Row: 3
java.awt.event.MouseEvent[MOUSE_PRESSED,(45,11),absolute(477,138),button=3,modifiers=Meta+Button3,extModifiers=Button3,clickCount=1] on javax.swing.JList[,0,0,200x200,alignmentX=0.0,alignmentY=0.0,border=,flags=50331944,maximumSize=,minimumSize=,preferredSize=,fixedCellHeight=-1,fixedCellWidth=-1,horizontalScrollIncrement=-1,selectionBackground=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],selectionForeground=sun.swing.PrintColorUIResource[r=51,g=51,b=51],visibleRowCount=8,layoutOrientation=0]
Row: 0

Tool completed successfully


1 commentaires

Désolé pour tous mes non-sens. C'est juste comment j'ai été enseigné. (classe de lycée)



6
votes

L'une des erreurs typiques peut être d'appeler jpopupmenu.setvisionVisible (true) code> et attendez-vous quelque chose à faire. Ce composant nécessite une méthode différente pour l'amener. Réécrivez votre auditeur de souris le long des lignes:

    listbox.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e) {
            if (e.isPopupTrigger()) {
                JPopupMenu menu = new JPopupMenu();
                JMenuItem item = new JMenuItem("Say hello");
                item.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        JOptionPane.showMessageDialog(inv.this, "Hello "
                                + listbox.getSelectedValue());
                    }
                });
                menu.add(item);
                menu.show(inv.this, 5, listbox.getCellBounds(
                        listbox.getSelectedIndex() + 1,
                        listbox.getSelectedIndex() + 1).y);
            }
        }
    });


3 commentaires

Pas sur SE Répondre par @KLEOPATRA, la logique est la même, JOPTIONPANE doit être retardée dans Invokelater (pas important)


Non, comme la méthode de wrapper invoquate n'est requise que lorsque vous appelez une méthode sur l'objet Swing du fil non pivotant. Dans notre cas, AddActionListener sera déjà appelé dans le fil pivotant.


Ce code jette une exception lorsque vous essayez de sélectionner un menu sur le dernier élément de la liste. listbox.getselectedex () + 1 Dans ce cas fait référence à un élément de liste inexistant.



5
votes

Basé dans le précédent aux réponses, le code ci-dessous serait sélectionner immédiatement l'élément (sur clic droit) et afficher la fenêtre contextuelle à côté du clic de la souris. xxx

Il existe une section commentée qui montre une manière possible d'éliminer l'élément; Il suppose l'existence d'une arraylist (appelé array_list ) contenant une copie des éléments sur le jlist . Il a utilisé la méthode to_array afin d'actualiser la jlist . Il devrait y avoir une manière plus efficace, mais si votre liste est courte, elle devrait suffire.


0 commentaires