Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Sorry I do not have experience using JPopupPanel. Thus, I can only offer a simple <strong>hack</strong>. </p> <p>I would suspect that you can do something similar as in my example (below) where I 'ignore' hiding popup menu on an option select. </p> <p>My approach here is to reshow the popup menu on an option selection. So fallowing this maybe you can try and reshow your panel when it hides.</p> <pre><code>import java.awt.Color; import java.awt.Dimension; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; public class JPopupMenuIgnoreOptionCloseOnClick extends JPanel { private static final long serialVersionUID = 1L; private JPopupMenu popup = new JPopupMenu("Oi I am popup"); private MouseListener mL = new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { System.out.println("mL mousePressed e.isP="+e.isPopupTrigger()); super.mousePressed(e); showPopup(e); } @Override public void mouseReleased(MouseEvent e) { System.out.println("mL mouseReleased e.isP="+e.isPopupTrigger()); super.mouseReleased(e); showPopup(e); } private void showPopup(MouseEvent e) { if(e.isPopupTrigger()) { prevLocation = e.getPoint(); popup.show(e.getComponent(), e.getX(), e.getY()); } } }; private Point prevLocation = null; private MouseListener optionML = new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { System.out.println("optionML mouseReleased prevLocation="+prevLocation); e.consume(); popup.show(JPopupMenuIgnoreOptionCloseOnClick.this, prevLocation.x,prevLocation.y); } }; public JPopupMenuIgnoreOptionCloseOnClick() { addMouseListener(mL); JMenuItem opt1 =new JMenuItem("Option 1"); opt1.addMouseListener(optionML); popup.add(opt1); JMenuItem opt2 =new JMenuItem("Option 2"); opt2.addMouseListener(optionML); popup.add(opt2); JMenuItem opt3 =new JMenuItem("Option 3"); opt3.addMouseListener(optionML); popup.add(opt3); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { JPopupMenuIgnoreOptionCloseOnClick p = new JPopupMenuIgnoreOptionCloseOnClick(); p.setPreferredSize(new Dimension(400, 400)); JPanel contentPane = new JPanel(); contentPane.setBackground(Color.CYAN); contentPane.add(p); JFrame f = new JFrame(); f.setContentPane(contentPane); f.setSize(800, 600); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload