Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    46

    Java Swing - associare a un JMenuItem la funzione di chiudere

    Ciao a tutti, mi sto addentrando nel favoloso mondo delle interfacce grafiche sviluppate con Java Swing

    al momento sto utilizzando come ambiente di lavoro NetBeans, semplicemente perchè avendo un editor grafico WYSIWYG mi consente di associare subito le operazioni che vedo svolgere a livello grafico in termini di codice...

    sono riuscito a sviluppare un semplice JFrame, all'interno del quale vi è una JMenuBar con 2 JMenu, e così via dicendo

    Vorrei associare un evento ad uno dei JMenuItem, e semplicemente seguendo la documentazione sul sito della Sun ho visto come funziona tra ActionListener e ActionPerformed

    sono arrivato a questo punto:

    codice:
    private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                             
            // QUI DEVO INSERIRE IL CODICE PER FARE SI CHE IL JFRAME DEVE ESSERE CHIUSO
        }
    dove devo praticamente inserire il codice per fare fisicamente chiudere la finestra (o JFrame che dir si voglia), però essendo il JFrame principale è un singleton e non ha una variabile associata, per cui non posso fare per esempio jframe.setVisible(false)

    posso recuperarlo dal contesto oppure invocando qualche metodo?

    qualcuno mi può aiutare che non riesco a trovarlo? grazie anticipatamente

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Java Swing - associare a un JMenuItem la funzione di chiudere

    Originariamente inviato da EtHeReAl
    al momento sto utilizzando come ambiente di lavoro NetBeans, semplicemente perchè avendo un editor grafico WYSIWYG mi consente di associare subito le operazioni che vedo svolgere a livello grafico in termini di codice...
    Nulla da obiettare se scegli questa strada. Sappi però che "farsi fare" il codice dell'interfaccia grafica da un ambiente di sviluppo può essere un'arma a doppio taglio. Il codice prodotto in automatico da un IDE può essere prolisso, difficile da capire e non facilmente modificabile a mano.

    Lo vedi bene dal tuo codice sotto: il metodo exitMenuItemActionPerformed è private e non è affatto il metodo del listener ... molto probabilmente è richiamato dal "vero" metodo del listener. Quindi è stato messo un qualcosa in più che di per sé non servirebbe.

    Originariamente inviato da EtHeReAl
    codice:
    private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                             
            // QUI DEVO INSERIRE IL CODICE PER FARE SI CHE IL JFRAME DEVE ESSERE CHIUSO
        }
    dove devo praticamente inserire il codice per fare fisicamente chiudere la finestra (o JFrame che dir si voglia), però essendo il JFrame principale è un singleton e non ha una variabile associata, per cui non posso fare per esempio jframe.setVisible(false)
    Dipende da dove è questo metodo .... in genere la cosa che si fa è estendere JFrame e implementare il listener in quella classe o in una inner-class. In tutti questi casi il 'this' relativo al JFrame ce l'hai senza problemi. Per altri tipi di strutturazioni del codice ... non so.

    Come ripeto, quel codice sopra non mi dice nulla ... non so dove è stato messo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    46
    sono riuscito a risolvere

    System.exit(0);

    molto banalmente

    ora devo trovare un modo che mi riesca a far chiudere un JInternalFrame, ma spulciando bene la documentazione qualcosa troverò sicuramente

    per quanto riguarda la classe che stavo implementando, ti posto il codice intero così ti fai un'idea:
    codice:
    /*
     * FlowConfigView.java
     *
     * Created on 8 aprile 2008, 17.48
     */
    
    package app;
    
    /**
     *
     * @author  ethereal
     */
    public class FlowConfigView extends javax.swing.JFrame {
        
        /** Creates new form FlowConfigView */
        public FlowConfigView() {
            initComponents();
        }
        
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
    
            menuPrincipale = new javax.swing.JMenuBar();
            fileMenu = new javax.swing.JMenu();
            newFlowMenuItem = new javax.swing.JMenuItem();
            openFlowMenuItem = new javax.swing.JMenuItem();
            exitMenuItem = new javax.swing.JMenuItem();
            helpMenu = new javax.swing.JMenu();
            aboutMenuItem = new javax.swing.JMenuItem();
    
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    
            fileMenu.setText("File");
    
            newFlowMenuItem.setText("New Flow");
            newFlowMenuItem.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    newFlowMenuItemActionPerformed(evt);
                }
            });
            fileMenu.add(newFlowMenuItem);
    
            openFlowMenuItem.setText("Open Flow");
            openFlowMenuItem.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    openFlowMenuItemActionPerformed(evt);
                }
            });
            fileMenu.add(openFlowMenuItem);
    
            exitMenuItem.setText("Exit");
            exitMenuItem.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    exitMenuItemActionPerformed(evt);
                }
            });
            fileMenu.add(exitMenuItem);
    
            menuPrincipale.add(fileMenu);
    
            helpMenu.setText("Help");
    
            aboutMenuItem.setText("About...");
            aboutMenuItem.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    aboutMenuItemActionPerformed(evt);
                }
            });
            helpMenu.add(aboutMenuItem);
    
            menuPrincipale.add(helpMenu);
    
            setJMenuBar(menuPrincipale);
    
            org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(0, 400, Short.MAX_VALUE)
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(0, 278, Short.MAX_VALUE)
            );
    
            pack();
        }// </editor-fold>                        
    
        private void newFlowMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                                
            // TODO add your handling code here:
        }                                               
    
        private void openFlowMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                                 
            // TODO add your handling code here:
        }                                                
    
        private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                             
            System.exit(0);
        }                                            
    
        private void aboutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                              
            // TODO add your handling code here:
        }                                             
        
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new FlowConfigView().setVisible(true);
                }
            });
        }
        
        // Variables declaration - do not modify                     
        private javax.swing.JMenuItem aboutMenuItem;
        private javax.swing.JMenuItem exitMenuItem;
        private javax.swing.JMenu fileMenu;
        private javax.swing.JMenu helpMenu;
        private javax.swing.JMenuBar menuPrincipale;
        private javax.swing.JMenuItem newFlowMenuItem;
        private javax.swing.JMenuItem openFlowMenuItem;
        // End of variables declaration                   
    
    
        
    }

    trovi delle ridondanze? qualcosa che non avrei dovuto mettere?

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    46
    approfitto per chiedervi se potete consigliarmi qualche libro cartaceo che parli di queste java swing su cui documentarmi, qui su internet mi sto perdendo in un mare magnum.... grazie mille in anticipo

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da EtHeReAl
    approfitto per chiedervi se potete consigliarmi qualche libro cartaceo che parli di queste java swing su cui documentarmi
    Di recente ho acquistato The Definitive Guide to Java Swing, Third Edition.
    In generale è davvero molto valido ed utile. C'è qualche "svista" ogni tanto e alcuni argomenti, secondo me, avrebbero dovuto essere descritti e spiegati in modo più ampio. Ma è normale in un libro. Comunque te lo consiglio.

    P.S. È aggiornato solo a Java 5. La cosa comunque non deve preoccupare ... in Java 6 ci sono è vero diverse cose in più ma se devi comprendere le basi e tutti i principali componenti, il libro è ok.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    46
    impossibile sperare in qualcosa di italiano vero?

    comunque riguardo al codice di sopra ci hai buttato un occhio? grazie mille per la disponibilità

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.