Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175

    Interfacce e visibilità

    Allora ho un file chiamato alerts.java che gestisce gli errori in base al seguente metodo (in pratica all'esecuzione di questo metodo apro un form):
    codice:
    //...
    public void showErr(String dettagli)
        {
            err = "...";
            
            // RENDO QUESTO FORM VISIBILE E STAMPO I MESSAGGI
            this.setVisible(true);
            txtDettagli.setText(dettagli);
            txtBox.setText(err);
        }
    //...
    Ora per comodità avevo considerato l'idea di mettere il tutto in un'interfaccia e così ho creato il file di interfaccia iface.java:
    codice:
    //...
    public interface iface {
        public void showErr(String dettagli);
    }
    Quindi negli altri file in cui ho intenzione di richiamare il metodo showErr:
    1. Implemento l'interfaccia con implement iface (colore rosso)
    2. creo un'istanza dell'interfaccia all'interno del file considerato (colore verde)

    esempio:
    codice:
    // File: Home.java
    //...
    public class Home extends javax.swing.JFrame implements iface {
        //...
    
        public Home() {
            //...
            initComponents();
        }
        
       //...    
     
        private void TASTO(java.awt.event.ActionEvent evt) {                                              
            showErr("ABC");
        }                                             
    
        // ...
    
        public void showErr(String dettagli) {}
    
        // ...
    }
    Detto questo, qualcuno mi saprebbe spiegare cosa fare affinchè showErr() venga eseguito perchè purtroppo così non accade nulla quando clicco TASTO. Ho saltato qualche passaggio?

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

    Re: Interfacce e visibilità

    Originariamente inviato da Metallica
    2. creo un'istanza dell'interfaccia all'interno del file considerato (colore verde)
    Non si dice così ..... si dice che implementi i metodi dell'interfaccia all'interno della classe.

    Originariamente inviato da Metallica
    esempio:
    codice:
    // File: Home.java
    //...
    public class Home extends javax.swing.JFrame implements iface {
        //...
    
        public Home() {
            //...
            initComponents();
        }
        
       //...    
     
        private void TASTO(java.awt.event.ActionEvent evt) {                                              
            showErr("ABC");
        }                                             
    
        // ...
    
        public void showErr(String dettagli) {}
    
        // ...
    }
    E chi è che chiama il metodo TASTO (brutto modo, tra l'altro, di dare il nome ad un metodo)??? Nessuno credo.

    Nella tua classe Home devi implementare l'interfaccia ActionListener (vedi package java.awt.event) e se ad esempio hai un JButton, devi associare ad esso (con addActionListener() ) il 'this', che fa riferimento alla tua classe che implementa l'ActionListener.
    Quando il pulsante viene premuto, viene chiamato il metodo actionPerformed.
    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 2000
    Messaggi
    1,175

    Re: Re: Interfacce e visibilità

    Originariamente inviato da andbin
    Nella tua classe Home devi implementare l'interfaccia ActionListener (vedi package java.awt.event) e se ad esempio hai un JButton, devi associare ad esso (con addActionListener() ) il 'this', che fa riferimento alla tua classe che implementa l'ActionListener.
    Quando il pulsante viene premuto, viene chiamato il metodo actionPerformed.
    In realtà non era TASTO ho cercato di semplificare le cose, in realtà è:
    codice:
    private void btnVisualizzaActionPerformed(java.awt.event.ActionEvent evt) {                                              
            showErr("dettagli dell'errore");
    }
    puoi spiegarmi con un codice di esempio che intendi con: "associare il this che fa riferimento..."

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Esempio completo con 2 pulsanti, nota le parti in rosso:

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame implements ActionListener
    {
        private JButton pulsante1;
        private JButton pulsante2;
    
        public TestFrame ()
        {
            super ("Esempio");
    
            setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            setSize (300, 300);
    
            pulsante1 = new JButton ("Pulsante 1");
            pulsante2 = new JButton ("Pulsante 2");
    
            // Dico ai pulsanti che l'action listener e` questa classe
            pulsante1.addActionListener (this);
            pulsante2.addActionListener (this);
    
            add (pulsante1, BorderLayout.NORTH);
            add (pulsante2, BorderLayout.SOUTH);
        }
    
        // Questo metodo DEVE essere dichiarato cosi`:
        public void actionPerformed (ActionEvent e)
        {
            Object src = e.getSource ();
    
            if (src == pulsante1)
                JOptionPane.showMessageDialog (this, "Hai premuto il pulsante 1");
            else if (src == pulsante2)
                JOptionPane.showMessageDialog (this, "Hai premuto il pulsante 2");
        }
    
        public static void main (String[] args)
        {
            SwingUtilities.invokeLater (new Runnable()
            {
                public void run ()
                {
                    TestFrame f = new TestFrame ();
                    f.setVisible (true);
                }
            });
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175

    Re: Interfacce e visibilità

    Perfetto e se volessi usare questo metodo showErr() all'interno di una classe pubblica e di un try ... catch (vedi corsivo)? Così facendo non succede nulla...
    codice:
    // File: Home.java
    //...
    public class Home extends javax.swing.JFrame implements iface {
        //...
    
        public Home() {
            //...
            initComponents();
        }
        
       //...    
     
       public ResultSet getResultFromPazienti(String query) {
            ResultSet rs=null;
            try{
                rs=stmt.executeQuery(query);
            }
            catch(SQLException e){
                showErr(e.getMessage());
            }
            return rs;
        }
                                               
    
        // ...
    
        public void showErr(String dettagli) {}
    
        // ...
    }

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

    Re: Re: Interfacce e visibilità

    Originariamente inviato da Metallica
    Perfetto e se volessi usare questo metodo showErr() all'interno di una classe pubblica e di un try ... catch (vedi corsivo)? Così facendo non succede nulla...
    Ma il metodo showErr che hai messo è vuoto .... o ci hai messo dentro qualcosa ma nel post hai messo {} per accorciare??

    E poi a cosa ti serve l'interfaccia iface??? Se chiami showErr dall'interno della classe, una interfaccia ti serve ben poco. Una interfaccia serve per dichiarare: "guardate, voi altre classi, che la mia classe Home implementa i metodi dell'interfaccia iface". Così se da qualche altra parte hai un reference di tipo iface che fa riferimento alla tua classe, allora sarà possibile chiamare il metodo showErr.

    Cioè può servire ad esempio per fare:

    codice:
    iface i = new Home ();
    
    ...
    i.showErr (qualcosa);
    Forse ... non ti è molto chiaro l'uso delle interfacce ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    in pratica a me serve che il metodo showErr presente nel file alerts.java possa essere chiamato da tutte le altre classi.

    Facendo:
    codice:
                alerts errore = new alerts();
                errore.showErr(e.getMessage());
    il tutto funziona correttamente, il mio problema però è che devo fare un uso massiccio di tale funzione, e sarebbe utile quindi se riuscissi a chiamarlo ogni volta con una semplice:
    codice:
    showErr(...);
    Mi era stato dunque consigliato l'uso delle interfacce ma a quanto vedo non è il metodo migliore...

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.