Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    chiusura finestre JFrame

    Ciao a tutti.. rieccomi qua
    dovrei risolvere questo problema, come cavolo faccioa chiudere i JFrame?
    Ovvero ho stutturato un programma che apre varie JFrame e tutto bene
    ma come cavolo faccio ho provato vari comandi ma non funzionano (danno errori) ad esempio:



    JFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLO SE);
    JFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_ CLOSE);
    JFrame.dispose();
    JFrame.dispatchEvent(close);

    l'unico che funzia e' contentPane.setVisible(false);

    che pero' mi lascia visibile il JFrame.

    Come accidenti faccio a far funzionare questa cosa?
    ad esempio:
    dalla classe login mi apre il JFrame per il login
    premento il Jbutton
    Mi apre un JFrame per la registrazione e sino qua bene
    ma finita la registrazione come cavolo faccio a chiudere solo il JFrame per la registrazione
    e riavere il JFrame dalla classe login senza doverlo riattivare con il solito
    login log=new login ();
    log.setVisible(true);

    Grazie a tutti..

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Il metodo da usare per chiudere un JFrame è dispose(); che va richiamato, ovviamente, sull'oggetto JFrame da chiudere.

    setDefaultCloseOperation() serve a dire al JFrame come comportarsi quando l'utente fa clic sulla X in alto a destra (o sul pulsante rosso nei Mac).

    dispatchEvent() è un metodo che viene richiamato dal framework Swing quando deve dispacciare gli eventi, non andrebbe richiamato dal programmatore se non in casi molto particolari.

    Eventualmente posta il codice che hai scritto, così da capire cosa stai sbagliando.


    Ciao.
    Ultima modifica di LeleFT; 14-05-2018 a 10:28
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    e' lunga.. e comunque ho provato con close(); e funzia , ma pero' nelle proprieta' del JFrame ho dovuto mettere
    nell'opzione DefaultClose DISPOSE_ON_CLOSE mentre prima era EXIT_ON_CLOSE
    Non Capisco..

    codice:
    package ImportOrUploadCSV_file;
    
    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    import javax.swing.table.TableModel;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    
    import java.awt.Font;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.Window;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    
    import javax.swing.SwingConstants;
    import javax.swing.JTextField;
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowEvent;
    import java.awt.event.ActionEvent;
    import java.awt.Color;
    import java.awt.Component;
    import javax.swing.Box;
    import javax.swing.ImageIcon;
    import javax.swing.JSeparator;
    import java.awt.SystemColor;
    
    public class registrazione extends JFrame {
    
        private JPanel contentPane;
        private JTextField txtNome;
        private JTextField txtCognome;
        private JTextField txtUser;
        private JTextField txtPsw;
        private JTextField txtPsw2;
        private JTextField txtMail;
        private JTextField txtEta;
        
        Connection connection = null;
        boolean consenso=false;   //se false non deve registrare User
        
        
    
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        registrazione frame = new registrazione();
                        frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    
        /**
         * Create the frame.
         */
        
        
        public void raccoltaDati() {
            
            boolean Flag1=false;
            String nome=txtNome.getText();
            String cognome=txtCognome.getText();
            String user=txtUser.getText();
            String psw=txtPsw.getText();
            String psw2=txtPsw2.getText();
            String mail=txtMail.getText();
            String eta=txtEta.getText();
            
            if (psw.equals(psw2)) {
                System.out.println(" E' TRUE ");
                Flag1=true;
            }
    
            
        }
        
        public void verificaDoppioni() {
            connection = sqliteConnection.dbConnector();
            String user=txtUser.getText();
            String psw=txtPsw.getText();
            String psw2=txtPsw2.getText();
            boolean Flag2=false;
    
            
            try {
    
                String query = "select * from EmployeeInfo ";
                PreparedStatement pst = connection.prepareStatement(query);
    
                
                
                ResultSet rs = pst.executeQuery();
                int count = 0;
                while (rs.next()) {
    
                    String xx  = rs.getString("Username");
                
    
                    
                            if (xx.equals(user)) {
                            
                                Flag2=true;
                            } 
                    
                }
                System.out.println("Flag2  "+Flag2);
                if (Flag2==true) {
                    JOptionPane.showMessageDialog(null, "User Gia' Utilizzato!! "); 
                    txtNome.setText("");
                    txtCognome.setText("");
                    txtUser.setText("");
                    txtPsw.setText("");
                    txtPsw2.setText("");
                    txtMail.setText("");
                    txtEta.setText("");
                    consenso=false;
                }
                 if (psw.equals(psw2)) {
                     
                     System.out.println("OK **** Si Vaaaaaaaaaaaaaaaaaaa"); 
                     consenso=true;
                     
                 }
                 else {
                     JOptionPane.showMessageDialog(null, "Password non corrispondenti ");  
                        txtNome.setText("");
                        txtCognome.setText("");
                        txtUser.setText("");
                        txtPsw.setText("");
                        txtPsw2.setText("");
                        txtMail.setText("");
                        txtEta.setText("");
                        consenso=false;
                 }
                
                
                
    
                rs.close();
                pst.close();
                
                } catch (Exception e)
            {
                JOptionPane.showMessageDialog(null, e);
                
            }
            
            System.out.println("Ok registrazione OK");
            
        }
        
        
        
        
        
    
        public void scriviDatDb() {
            
            boolean Flag;
            String nome=txtNome.getText();
            String cognome=txtCognome.getText();
            String user=txtUser.getText();
            String psw=txtPsw.getText();
            String psw2=txtPsw2.getText();
            String mail=txtMail.getText();
            String eta=txtEta.getText();
            String admin="false";
            
            
            
            if (psw.equals(psw2)) {
                System.out.println(" E' TRUE ");
                Flag=true;
            }
            else 
                Flag=false;
            
            System.out.println("il flag e'  "+Flag);
            
            verificaDoppioni();
            
            if (consenso==true) {
                
                
                try {
                    
    //                String query = "insert into Ordini (data,utente,articolo1,prezzo1,articolo2,prezzo2,articolo3,prezzo3,articolo4,prezzo4,articolo5,prezzo5) values(?,?,?,?,?,?,?,?,?,?,?,?)";
    //                String query2= "insert into OrdineNew (Data,Utente,ImportoTotale,Evaso) values(?,?,?,?)";
    //                String query3= "insert into OrdineDettaglio (Id_ordine,Pezzi,Descrizione,Prezzo) values(?,?,?,?)";
                    String query = "insert into EmployeeInfo (Name,Surname,Username,password,Age,Administrator,Mail,Inscritto,Ultimoaccesso) values(?,?,?,?,?,?,?,?,?)";
                    
                    connection = sqliteConnection.dbConnector(); 
                    PreparedStatement pst1 = connection.prepareStatement(query);
                    
                    String dataLocale= new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(Calendar.getInstance().getTime()) ; //"yyyy/MM/dd HH:mm:ss")
                    int prezzoTot=100;
                    String evaso="false";
                    
    
                    pst1.setString(1, nome);
                    pst1.setString(2, cognome);
                    pst1.setString(3, user);
                    pst1.setString(4, psw);
                    pst1.setString(5, eta);
                    pst1.setString(6, admin);
                    pst1.setString(7, mail);
                    pst1.setString(8, dataLocale);
                    pst1.setString(9, dataLocale);
                    
                    
                    pst1.execute();
                    pst1.close();
                
                    JOptionPane.showMessageDialog(null, "Data Saved");                    
    
                    
                    
                    } catch (Exception e) {
                    e.printStackTrace();
                    }
                
                
            } else {
                System.out.println("PROBLEMI...SCRITTO NIENTE");
            }
            
            
    
            
            System.out.println("FINE REGOLARE");
            //close();
            
        }
        
        
        
        
        public void close() {
            WindowEvent winClosingEvent = new WindowEvent(this,WindowEvent.WINDOW_CLOSING);
            Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(winClosingEvent);
    
        }
        
        
    
        
        
        
        
        
        
        
        
        
        
        
        
        public registrazione() {
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            setBounds(100, 100, 660, 510);
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            setContentPane(contentPane);
            contentPane.setLayout(null);
            
            JLabel lblNewLabel = new JLabel("PANNELLO REGISTRAZIONE");
            lblNewLabel.setForeground(Color.GRAY);
            lblNewLabel.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 23));
            lblNewLabel.setBounds(22, 24, 435, 61);
            contentPane.add(lblNewLabel);
            
            JLabel lblNewLabel_1 = new JLabel("Nome");
            lblNewLabel_1.setFont(new Font("Tahoma", Font.PLAIN, 16));
            lblNewLabel_1.setBounds(22, 119, 94, 35);
            contentPane.add(lblNewLabel_1);
            
            JLabel lblCognome = new JLabel("Cognome");
            lblCognome.setFont(new Font("Tahoma", Font.PLAIN, 16));
            lblCognome.setBounds(22, 165, 94, 35);
            contentPane.add(lblCognome);
            
            JLabel lblUser = new JLabel("User");
            lblUser.setFont(new Font("Tahoma", Font.PLAIN, 16));
            lblUser.setBounds(22, 213, 94, 35);
            contentPane.add(lblUser);
            
            JLabel lblPsw = new JLabel("Psw");
            lblPsw.setFont(new Font("Tahoma", Font.PLAIN, 16));
            lblPsw.setBounds(22, 259, 94, 35);
            contentPane.add(lblPsw);
            
            JLabel lblConfermaPsw = new JLabel("Conferma Psw");
            lblConfermaPsw.setFont(new Font("Tahoma", Font.PLAIN, 16));
            lblConfermaPsw.setBounds(22, 305, 118, 35);
            contentPane.add(lblConfermaPsw);
            
            JLabel lblMail = new JLabel("Mail");
            lblMail.setFont(new Font("Tahoma", Font.PLAIN, 16));
            lblMail.setBounds(22, 351, 94, 35);
            contentPane.add(lblMail);
            
            JLabel lblEta = new JLabel("Eta'");
            lblEta.setFont(new Font("Tahoma", Font.PLAIN, 16));
            lblEta.setBounds(22, 397, 94, 35);
            contentPane.add(lblEta);
            
            txtNome = new JTextField();
            txtNome.setBounds(150, 119, 248, 35);
            contentPane.add(txtNome);
            txtNome.setColumns(10);
            
            txtCognome = new JTextField();
            txtCognome.setColumns(10);
            txtCognome.setBounds(150, 165, 248, 35);
            contentPane.add(txtCognome);
            
            txtUser = new JTextField();
            txtUser.setColumns(10);
            txtUser.setBounds(150, 213, 248, 35);
            contentPane.add(txtUser);
            
            txtPsw = new JTextField();
            txtPsw.setColumns(10);
            txtPsw.setBounds(150, 259, 248, 35);
            contentPane.add(txtPsw);
            
            txtPsw2 = new JTextField();
            txtPsw2.setColumns(10);
            txtPsw2.setBounds(150, 305, 248, 35);
            contentPane.add(txtPsw2);
            
            txtMail = new JTextField();
            txtMail.setColumns(10);
            txtMail.setBounds(150, 351, 248, 35);
            contentPane.add(txtMail);
            
            txtEta = new JTextField();
            txtEta.setColumns(10);
            txtEta.setBounds(150, 397, 248, 35);
            contentPane.add(txtEta);
            
            JButton btnNewButton = new JButton("Registrati");
            btnNewButton.setForeground(SystemColor.textHighlight);
            btnNewButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    
                    scriviDatDb();
                    //contentPane.close;
                    
                }
            });
            btnNewButton.setFont(new Font("Tahoma", Font.BOLD, 18));
            btnNewButton.setBounds(495, 437, 139, 23);
            contentPane.add(btnNewButton);
            
            JButton btnNewButton_1 = new JButton("Esci");
            btnNewButton_1.setForeground(SystemColor.textHighlight);
            btnNewButton_1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    
                    
                    
                    
                    close();
                    //System.exit(0);
                    //contentPane.setVisible(false);
                    //contentPane.setVisible(true);
                    
                    
    //                JFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //                JFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                    JFrame.dispose();
    //                JFrame.dispatchEvent(close);
                    
                    
                }
            });
            btnNewButton_1.setFont(new Font("Tahoma", Font.BOLD, 17));
            btnNewButton_1.setBounds(540, 365, 94, 35);
            contentPane.add(btnNewButton_1);
            
            JSeparator separator = new JSeparator();
            separator.setBounds(22, 82, 352, 8);
            contentPane.add(separator);
            
            JLabel lblNewLabel_2 = new JLabel("");
            Image img2 = new ImageIcon(this.getClass().getResource("/Register-icon.png")).getImage();  // questa riga e la successiva mette l'immagine *****
            lblNewLabel_2.setIcon(new ImageIcon(img2));    
            lblNewLabel_2.setBounds(460, 24, 161, 178);
            contentPane.add(lblNewLabel_2);
        }
    }
    Ultima modifica di LeleFT; 15-05-2018 a 12:32 Motivo: Aggiunti i tag CODE

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Ripeto, il metodo è dispose(). Dai commenti che hai in quel codice sembra che tu stessi cercando di invocare un metodo statico dispose() direttamente nella classe JFrame: ovviamente, no, il metodo non è statico e va invocato sull'istanza del JFrame da chiudere. Quindi semplicemente dispose() senza nulla prima e senza nulla dopo (a parte il punto e virgola).

    codice:
    btnNewButton_1.addActionListener(new ActionListener() {
       @Override
       public void actionPerformed(ActionEvent e) {
          dispose();   // semplicemente
       }
    });
    Non mi pronuncio sul fatto che quel codice non va bene (stai facendo il contrario delle convenzioni basilari sulla nomenclatura, usando le minuscole dove andrebbero le maiuscole e viceversa, stai facendo accessi al DB direttamente nel contesto del EDT e questo non va bene, non stai gestendo correttamente le eccezioni e la contestuale chiusura delle risorse del DB, ecc).

    Guarda questo banalissimo esempio:

    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    
    public class FramePrincipale extends JFrame {
    
       private JButton cmdApri;
       private JButton cmdChiudi;
    
       private JFrame frmPiccolo;
    
       public FramePrincipale() {
          setTitle("Frame Principale");
          setSize(400, 300);
          setLocationRelativeTo( null );
    
          // La X sulla finestra principale, fa terminare l'intera JVM
          setDefaultCloseOperation( EXIT_ON_CLOSE );
    
          initComponents();
       }
    
       private void initComponents() {
          Container c = getContentPane();
          JPanel jpCentro = new JPanel( new FlowLayout(FlowLayout.CENTER, 40, 2) );
          jpCentro.setBorder( BorderFactory.createEmptyBorder(100, 0, 100, 0) );
    
          cmdApri = new JButton("Apri Finetra");
          cmdApri.addActionListener( new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent ae) {
                apriFinestra();
             }
          });
    
          cmdChiudi = new JButton("Chiudi Finetra");
          cmdChiudi.setEnabled( false );
          cmdChiudi.addActionListener( new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent ae) {
                chiudiFinestra();
             }
          });
    
          jpCentro.add( cmdApri );
          jpCentro.add( cmdChiudi );
    
          c.add(jpCentro, BorderLayout.CENTER);
       }
    
       private void apriFinestra() {
          frmPiccolo = new JFrame();
          frmPiccolo.setTitle("Finetra piccola");
          frmPiccolo.setSize(200, 100);
    
          // La X sulla finestra piccola non fa nulla
          frmPiccolo.setDefaultCloseOperation( DO_NOTHING_ON_CLOSE );
    
          frmPiccolo.setVisible( true );
    
          cmdApri.setEnabled( false );
          cmdChiudi.setEnabled( true );
       }
    
       private void chiudiFinestra() {
          if (frmPiccolo != null) {
             frmPiccolo.dispose();   // Chiudi la finestra piccola!
             frmPiccolo = null;
          }
          cmdApri.setEnabled( true);
          cmdChiudi.setEnabled( false );
       }
    
       public static void main(String[] args) {
          try {
             UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
          } catch (Exception e) { /* L&F */ }
    
          SwingUtilities.invokeLater( new Runnable() {
             @Override
             public void run() {
                FramePrincipale frm = new FramePrincipale();
                frm.setVisible( true );
             }
          });
       }
    }

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    grazie per la risposta,
    I Jframe li ho fatti scrivere da eclipse,
    il primo vado su:file, new, other, windowbuilder, swing design, application window
    tutti gli altri jframe invece: file, new, other, windowbuilder, swing design, Jframe
    Puoi spiegarmi come correggere gli errori ?

    stai facendo accessi al DB direttamente nel contesto del EDT e questo non va bene, non stai gestendo correttamente le eccezioni e la contestuale chiusura delle risorse del DB, ecc).

    Attendo tue notizie.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Primo consiglio: non farti generare il codice dal IDE. Impara a scriverlo a mano (come puoi vedere dal mio esempio sono pochissime righe): meno rogne, meno cose inutili, codice più manutenibile e più efficiente e tutto sotto il tuo controllo.

    Per quanto riguarda l'EDT (Event Dispatch Thread) è il thread (l'unico) che si occupa della gestione della parte grafica di Swing (disegno dei componenti, dispacciamento degli eventi, ecc) e non va tenuto impegnato per troppo tempo, altrimenti l'effetto è quello di avere l'interfaccia grafica freezata. Tutto ciò che non ha a che fare con la grafica, non deve essere eseguito dal EDT, ma da un thread a parte (accesso a database, accesso al FileSystem, connessioni di rete, elaborazioni computazionalmente costose, ecc).

    Troverai decine di discussioni sull'argomento anche in questo forum:
    http://forum.html.it/forum/showthrea...readid=2925507
    http://forum.html.it/forum/showthrea...readid=2911414
    http://forum.html.it/forum/showthrea...readid=2934812
    http://forum.html.it/forum/showthrea...readid=2915447
    http://forum.html.it/forum/showthrea...readid=2926527

    ... ce ne sono molte altre.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.