[Risolto] Menù che si apre automaticamente.

di il
2 risposte

[Risolto] Menù che si apre automaticamente.

Amici carissimi,
ho un problemino che probabilmente per un esperto è banale ma io non trovo la quadra.
Sto realizzando un programmino in Java 7 con un menù popolato a run-time.
E fin qui ci riesco.
Ma vorrei che ogni volta che il programma viene eseguito o riceve il fuoco quel menù si aprisse automaticamente predisponendosi a riceve la scelta dell'utente.
Non riesco a trovare un metodo adatto a questo scopo.
Probabilmente ce l'ho sotto il naso ma non lo vedo, perchè mi sembra improbabile che non esista ... almeno spero.
Qualche idea?

2 Risposte

  • Re: [Risolto] Menù che si apre automaticamente.

    ZioCrick ha scritto:


    Ma vorrei che ogni volta che il programma viene eseguito o riceve il fuoco quel menù si aprisse automaticamente predisponendosi a riceve la scelta dell'utente.
    Se intendi un classico JMenu agganciato ad un JMenuBar (la barra di menù "classica" di una finestra), sì è possibile.

    Stringato al minimo:
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowFocusListener;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.SwingUtilities;
    
    public class ProvaFrame extends JFrame {
        public ProvaFrame() {
            super("Prova Frame");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setSize(400, 300);
    
            JMenuBar menuBar = new JMenuBar();
            JMenu fileMenu = new JMenu("File");
            JMenuItem newItem = new JMenuItem("Nuovo");
            JMenuItem openItem = new JMenuItem("Apri");
    
            menuBar.add(fileMenu);
            fileMenu.add(newItem);
            fileMenu.add(openItem);
            setJMenuBar(menuBar);
    
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    fileMenu.doClick();   // apre menù all'inizio
                }
            });
    
            addWindowFocusListener(new WindowFocusListener() {
                public void windowGainedFocus(WindowEvent e) {
                    fileMenu.doClick();   // apre menù al ricevimento del focus
                }
    
                public void windowLostFocus(WindowEvent e) {
                }
            });
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new ProvaFrame().setVisible(true);
                }
            });
        }
    }
    Nota che c'è un motivo molto ben preciso per cui il doClick() dell'apertura iniziale viene fatto passare nel EDT con il "solito" invokeLater.
  • Re: [Risolto] Menù che si apre automaticamente.

    Caro @andbin forse te l'ho già detto, ma per me sei mitico!
    Ho provato ad applicare al mio programmino il codice che mi hai gentilmente riportato e funziona!!!

    Adesso però ... mi tocca approfondire questo fatidico invokeLater ...
    perché sono andato a rileggermi la mia richiesta di aiuto precedente:
    https://www.iprogrammatori.it/forum-programmazione/java/intercettare-istanza-del-programma-gia-esecuzione-t40038-15.html
    nella quale mi avevi suggerito l'utilizzo di invokeLater.
    In realtà dopo qualche tentativo di capirci qualcosa avevo lasciato perdere perche mi sembrava troppo complicato.
    A questo punto però, mi viene il dubbio che il fatto di non averlo utilizzato potrebbe essere la causa del problema che ho descritto qui:
    https://www.iprogrammatori.it/forum-programmazione/microsoft-windows/programma-java-che-windows-bizze-t42358.html
    perché è un comportamento alquanto strano e illogico.
    Solo che devo capire in che punto del programma inserire l'uso di invokeLater ...
Devi accedere o registrarti per scrivere nel forum
2 risposte