À l'instant où un utilisateur clique droit sur un élément JList sélectionné dans mon programme le JPopupMenu résultant efface la sélection (au moins visuellement) jusqu'à ce que le menu contextuel est fermé. Cela ne correspond pas à l'aspect et à la convivialité d'une plate-forme que je connais. L'élément doit rester visuellement sélectionné ou avoir une bordure de couleur sélectionnée autour de lui. Mais je ne trouve rien d'autre dans l'API à propos des menus contextuels qui modifient l'apparence de la sélection. Est-ce que je peux contrôler ce comportement?comment arrêter JPopupMenu show() de désélectionner visuellement l'élément de la liste cliqué sur
0
A
Répondre
2
Comment implémentez-vous votre Mouse Listener qui affiche le popup? J'ai créé une application de test pour démontrer le comportement des sélections List et des menus contextuels auxquels je m'attendais généralement. Sous Windows avec Java 1.5/6, ce comportement est correct.
Peut-être que cela vous aidera avec votre problème particulier.
package jlist;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class Test extends JPanel implements ListSelectionListener {
private static final String ACTION_FEED = "Feed";
private JList list;
private JPopupMenu menu;
// Initialise a JList and add to JPanel.
public Test() {
super(new BorderLayout());
list = new JList(new Object[]{"Badger", "Ferret", "Stoat", "Weasel"});
initActions();
list.addListSelectionListener(this);
// Add mouse listener
list.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) showPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) showPopup(e);
}
private void showPopup(MouseEvent e) {
menu.show(e.getComponent(), e.getX(), e.getY());
}
});
add(new JScrollPane(list), BorderLayout.CENTER);
valueChanged(null);
}
// Triggered when List Selection changes. Used to control Actions enabled state.
public void valueChanged(ListSelectionEvent e) {
boolean selected = list.getSelectedValue() != null;
getActionMap().get(ACTION_FEED).setEnabled(selected);
}
// Initialise Actions and Popup Menu
private void initActions() {
menu = new JPopupMenu();
Action feed = new AbstractAction(ACTION_FEED) {
public void actionPerformed(ActionEvent e) {
String value = (String) list.getSelectedValue();
JOptionPane.showMessageDialog(Test.this, "Fed " + value);
}
};
getActionMap().put(ACTION_FEED, feed);
menu.add(feed);
}
public static void main(String [] args) {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(new Test());
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
}
Questions connexes
- 1. Obtenir la position de JPopupMenu
- 2. Comment arrêter AnythingSlider lorsque Flowplayer a cliqué
- 3. Comment animer l'affichage de JPopupMenu?
- 4. Comment afficher une autre vue de la liste 'B' après avoir cliqué sur List View 'A'
- 5. JPopupMenu Comportement
- 6. Comment désélectionner un élément JList de mon programme
- 7. Changer bg sur la radio désélectionner
- 8. Arrêter l'action dans la vue lorsque uinavigationcontroller a cliqué à la vue précédente sur l'iPhone
- 9. Comment arrêter l'héritage css dans la liste de sous-ordre
- 10. Arrêter la fonction Diaporama lorsque le bouton est cliqué
- 11. Comment faire pour "désélectionner" la notification sur UILabel
- 12. PyQt bloquant la version de show()
- 13. Pourquoi la fonction OnLvnItemchangedList1 appel deux fois quand j'ai cliqué sur le contrôle de la liste
- 14. Utilisation de show/hide avec l'effet 'slide', comment démarrer/arrêter le glissement à un offset?
- 15. jQuery La localisation sélectionner/désélectionner
- 16. fadein/fadeout div sur checkbox sélectionner/désélectionner
- 17. Détection de l'élément cliqué sur
- 18. Comment arrêter la rotation sur `willRotateToInterfaceOrientation:`
- 19. Comment arrêter AnythingSlider sur la dernière diapositive?
- 20. Supprimer (désélectionner) les éléments sélectionnés de la zone de liste à l'aide javascript
- 21. comment arrêter la variation de la largeur
- 22. Pourquoi show n'actualise pas cette vue de liste de rebol?
- 23. Comment désélectionner un bouton radio?
- 24. LinkButton Cliqué sur OnPreRender
- 25. Comment arrêter la fonction de fonctionner en javascript, jquery?
- 26. Sélectionnez l'élément de la liste déroulante après avoir cliqué sur le bouton
- 27. Comment trouver la position d'un élément cliqué?
- 28. Comment utiliser la forme du descendant sans la présence de la forme de l'ancêtre visuellement
- 29. comment arrêter l'actualisation de la vue javascript
- 30. jQuery show/hide - Question sur la variable de retard
Pouvez-vous poster un peu de votre code? Parce que ce n'est pas le comportement normal de JPopupMenu (pour autant que je sache)! – Alex
Oh mec, je suis désolé, j'ai fait un petit exemple et vous avez raison. Le problème a été causé par mon code focusLost qui efface la sélection. Il ne m'est jamais venu à l'esprit que le PopupMenu est un composant différent qui obtient le focus! Merci pour la vérification de la réalité! –