Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81

    Problema con PopupMenu e java.awt.IllegalComponentStateException

    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());
           }
         }
         
        }

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Per quale motivo aggiungi il PopupMenu ad un pannello? :master:
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81
    Sicuramente ti stai riferendo a questa linea di codice:
    codice:
    this.scrollPaneImmagine.setComponentPopupMenu(jPopupMenuImmagine);
    Il motivo è semplice, voglio che mi appaia solo quando clicco con il tasto destro sullo scrollPane e non su tutto il frame

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    Ciao
    Se usi setComponentPopupMenu(jPopupMenuImmagine) non dovresti aver bisogno del mouselistener.. Prova ad eliminarlo e vedi se il problema si risolve..
    Inoltre, anche volendo usare il mouseListener per far comparire il popupMenu, dovresti aggiungerlo allo scrollpane, non al frame..
    Spero di essere stato di aiuto

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    81
    Ho risolto!!! Ho eliminato dal codice mouselistener e funziona tutto alla perfezione..grazieeee

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.