Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Hmm did a short example for you:</p> <p><img src="https://i.stack.imgur.com/dPjg2.png" alt="JPopUpMenu"></p> <p><img src="https://i.stack.imgur.com/fcdRC.png" alt="Square drawn"></p> <p><strong>Test.java:</strong></p> <pre><code>import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.List; import javax.swing.*; public class Test { private final JFrame frame = new JFrame(); private final MyPanel panel = new MyPanel(); private void createAndShowUI() { frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(false); frame.add(panel); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new Test().createAndShowUI(); } }); } } </code></pre> <p><strong>MyPanel.java:</strong></p> <pre><code>class MyPanel extends JPanel { private final JPopupMenu popupMenu = new JPopupMenu(); private final JMenuItem drawRectJMenu = new JMenuItem("Draw Rectangle here"); private int x = 0, y = 0; private List&lt;Rectangle&gt; recs = new ArrayList&lt;&gt;(); public MyPanel() { initComponents(); } private void initComponents() { setBounds(0, 0, 600, 600); setPreferredSize(new Dimension(600, 600)); popupMenu.add(drawRectJMenu); add(popupMenu); addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) { checkForTriggerEvent(e); } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } private void checkForTriggerEvent(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON3) { x = e.getX(); y = e.getY(); popupMenu.show(e.getComponent(), x,y); } } }); drawRectJMenu.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { addRec(new Rectangle(x, y, 100, 100)); repaint(); } }); } public void addRec(Rectangle rec) { recs.add(rec); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; for (Rectangle rec : recs) { g2d.drawRect(rec.x, rec.y, rec.width, rec.height); } } } </code></pre>
 

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