Ciao..ho creato un PopupMenu e l'ho associato solo ad uno scrollPane all'interno del frame ed ho associato un gestore MouseListener per catturare l'azione e tutto funziona perfettamente, l'unico problema è che quando premo con il tasto destro su un altro componente all'interno del frame mi solleva questa eccezione che sinceramente non so come gestire..potete darmi un consiglio.
Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: component must be showing on the screen to determine its location
at java.awt.Component.getLocationOnScreen_NoTreeLock( Component.java:1828)
at java.awt.Component.getLocationOnScreen(Component.j ava:1802)
at javax.swing.JPopupMenu.show(JPopupMenu.java:893)
at it.unibas.browserImmagini.vista.SchermoPrincipale$ PopupListener.mouseReleased(SchermoPrincipale.java :110)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEven tMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.jav a:6134)
at javax.swing.JComponent.processMouseEvent(JComponen t.java:3265)
at java.awt.Component.processEvent(Component.java:589 9)
at java.awt.Container.processEvent(Container.java:202 3)
at java.awt.Component.dispatchEventImpl(Component.jav a:4501)
Vi posto un pò di codice:
codice:JPopupMenu jPopupMenuImmagine; public void popupMenuImmagine(){ JMenuItem voceApri = new JMenuItem(this.controllo.getAzione(Costanti.AZIONE_APRI_FILE)); JMenuItem voceApriDirectory = new JMenuItem(this.controllo.getAzione(Costanti.AZIONE_APRI_DIRECTORY)); JMenuItem voceSalva = new JMenuItem(this.controllo.getAzione(Costanti.AZIONI_SALVA_CON_NOME)); JMenuItem voceChiudi = new JMenuItem(this.controllo.getAzione(Costanti.AZIONE_CHIUDI)); voceChiudi.setIcon(null); voceApri.setIcon(null); voceApriDirectory.setIcon(null); voceSalva.setIcon(null); this.jPopupMenuImmagine.add(voceApri); this.jPopupMenuImmagine.add(voceApriDirectory); this.jPopupMenuImmagine.add(voceSalva); this.jPopupMenuImmagine.add(voceChiudi); this.scrollPaneImmagine.setComponentPopupMenu(jPopupMenuImmagine); MouseListener popupListener = (MouseListener) new PopupListener(); this.addMouseListener(popupListener); setVisible(true); } class PopupListener extends MouseAdapter { public void mousePressed(MouseEvent e) { if (e.isPopupTrigger()) { jPopupMenuImmagine.show(e.getComponent(), e.getX(), e.getY()); } } public void mouseReleased(MouseEvent e) { if (e.isPopupTrigger()) { jPopupMenuImmagine.show(e.getComponent(), e.getX(), e.getY()); } } }

Rispondi quotando
