JList clic Droit affiche le menu (Utiliser, supprimer, annuler)
J'ai été à récurer l'internet pour répondre à cette question. J'ai une simple JList avec des éléments à l'intérieur. Quand je clic droit, je veux un menu pop-up qui dit que "l'Utilisation, de la goutte, de l'annuler" ou quelque chose de cette nature. CEPENDANT, je suis perplexe.
Le code ci-dessous va produire un simple JList avec quelques éléments à l'intérieur. J'ai essayé d'ajouter un clic droit dans le code mais il ne fonctionne pas. De l'aide?
Voici ce que j'ai à ce jour:
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseAdapter;
import javax.swing.*;
public class inv extends JApplet implements MouseListener {
JList listbox;
public void init()
{
String listData[] = { "Item 1","Item 2","Item 3","Item 4" };
listbox = new JList( listData );
listbox.addMouseListener( new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
if ( SwingUtilities.isRightMouseButton(e) )
{
listbox.setSelectedIndex(getRow(e.getPoint()));
}
}
});
listbox.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
add(listbox);
listbox.setVisible(true);
listbox.setFocusable(false);
}
private int getRow(Point point)
{
return listbox.locationToIndex(point);
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public void stop()
{
}
public void paint(Graphics g)
{
}
}
OriginalL'auteur nn2 | 2011-01-31
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas ce que tu veux dire. Voici le code qui semble fonctionner comme vous l'indiquez, mais en dehors de prendre n'importe quel nombre de redondance ou de buggy états, c'est à peu près ce que vous avez posté.
Sortie
Veuillez accepter la réponse si elle a permis de résoudre le problème.
OriginalL'auteur Andrew Thompson
L'une des erreurs les plus fréquentes peuvent être d'appeler
JPopupMenu.setVisible(true)
et attendre que quelque chose arrive. Ce composant a besoin d'une autre méthode pour le mettre en place. Réécrire votre écouteur de souris le long des lignes de:De faire exemple court, j'ai ajouter un seul article, mais sûrement, de plus peut être ajouté. Le spectacle méthode que j'utilise oblige également à préciser où sur le composant le menu devrait s'afficher. L'emplacement peut être obtenu à partir de la liste elle-même comme on le voit dans cet exemple.
Non, comme invokeLater wrapper méthode n'est requis lors de l'appel d'une méthode sur Swing objet non Swing fil. Dans notre cas addActionListener sera déjà appelé dans le Swing fil.
Ce code génère une exception lorsque vous essayez d'afficher un menu sur le dernier élément de la liste. listbox.getSelectedIndex() + 1 dans ce cas se réfère à un non-existant élément de la liste.
OriginalL'auteur h22
Basé dans les précédentes réponses, le code ci-dessous serait immédiatement sélectionnez l'élément (clic droit), et l'affichage de la pop-up à côté du clic de la souris.
Il y a une section commentée qui montre une voie possible de la suppression de l'article; il suppose l'existence d'un
ArrayList
(appeléarray_list
) qui contient une copie des éléments sur laJList
. Il a utilisé la méthodeto_array
afin de rafraîchir leJList
. Il devrait y avoir une manière plus efficace, mais si votre liste est courte, il devrait être suffisant.OriginalL'auteur toto_tico