Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Gestione eventi java

Hybrid View

  1. #1

    Gestione eventi java

    Salve a tutti;

    ho un problema con la gestione degli eventi. In pratica vorrei che al click di un tasto si aprisse una finestra.
    In altre parole vorrei capire cosa va scritto nell'action performed del jbutton affinchè ciò avvenga.

    PS Ho già creato sia la finestra col tasto che la finestra che vorrei si aprisse alla pressione di quel tasto.

    Grazie anticipatamente!!!

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Il "tasto" è un JButton?
    Aggiungi un ActionListener dando un corpo al metodo actionPerformed.

    http://docs.oracle.com/javase/tutori...nlistener.html
    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
    Dec 2009
    Messaggi
    1,123
    Non capisco il problema dell'aprire la finestra. Avrai la finestra principale e l'avrai "aperta" in un determinato modo; funziona così anche con l'altra. Devi appunto scrivere le istruzioni nel metodo actionPerformed().

  4. #4
    Il problema consiste nel fatto che non so quali sono le istruzioni sta scrivere nell'action performed.


    Cerco di essere più chiaro sul problema.
    In pratica devo realizzare un sist software per la gestione di un lido balneare....questo problema che ho posto si riferisce ad esempio al caso in cui un cliente clicca sul JButton "nuova prenotazione" e si deve aprire la finestra per la scelta della data ed altre info...

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Ah ok, se il problema è questo allora ti scrivo un esempio.

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    class Scelta extends JFrame {
      Scelta() {
        super("Scelta Opzioni");
        
        JPanel panel = new JPanel();
        JTextField field = new JTextField(10);
        
        panel.add(field);
        
        add(panel);
        
        addWindowListener(new MyWindowListener());
        
      }
      
       private class MyWindowListener extends WindowAdapter {
         public void windowClosing(WindowEvent we) {
           dispose();
         }
       }
      
    }
    
    class Finestra extends JFrame implements ActionListener {
      private JButton scelta;
      
      Finestra() {
        super("Finestra Principale");
        
        JPanel panel = new JPanel();
        scelta = new JButton("Scelta");
        scelta.addActionListener(this);
        
        panel.add(scelta);
        
        add(panel);
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }
      
      public void actionPerformed(ActionEvent ae) {
        Scelta s = new Scelta();
        s.setSize(200,200);
        s.setVisible(true);
      }
      
      
      public static void main(String[] args) {
        try {
          SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
              makeGUI();
            }
          });
        } catch(Exception e) {}
      }
      
      public static void makeGUI() {
        Finestra fin = new Finestra();
        fin.setSize(500,500);
        fin.setVisible(true);
      }
    }
    Per una gestione un po' più completa, in modo ad esempio di nascondere l'altra finestra o fare altre cose, ti lascio a questa pillola: http://solopc.forumcommunity.net/?t=49777313

    Se hai domande relative ai codici ovviamente fai pure.

  6. #6
    Innanzitutto grazie mille...

    E se volessi dividere quello che mi hai mandato in tre classi diverse: GUI, GUI_BUSINESS e GUI_LISTENER??? non so se mi spiego

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Prego.


    Sarà che non sono molto in forma, ma non ho capito bene che intendi.
    Vuoi una classe che si occupa della gestione dei listener più altre classi (specifica cosa intendi per GUI e GUI_BUSINESS per favore)?

    Nel caso dei listener lo faccio già. Ho creato una classe all'interno dell'altra. Se vuoi gestirli in una classe penso sia la soluzione migliore anche a livello concettuale, in quanto l'apertura di quella finestra avviene in quella particolare circostanza.

  8. #8
    cioè GUI dovrebbe contenere solo la parte che riguarda le finestre con i relativi Jbutton ecc ecc....invece gui listener la logica di funzionamento del listener.

    Riferito al mio problema.... io ho la classe cliente vista che quando va in esecuzione è una finestra col pulsante nuova prenotazione . Una volta cliccato quel pulsante dovrebbe aprirsi un altra finestra contenuta in un altra classe.

    Leggendo come lo hai scritto tu (siccome non sono molto pratico di java) non riesco a capire che codice devo scrivere nel JButton "Nuova Prenotazione" affinchè si apra l'altra finestra che, come ho detto prima, è oggetto di un'altra classe.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Infatti funziona così il codice li sopra. Uso la classe interna (MyWindowListener) solo per gestire la chiusura della seconda finestra che apri.

    Se un pulsante ha un ascoltatore (ActionListener) quando lo premi viene chiamato il metodo actionPerformed().
    Quindi per aprire la finestra quando clicko faccio semplicemente:
    codice:
    Scelta s = new Scelta();
    s.setSize(200,200);
    s.setVisible(true);
    Le classi le puoi gestire come meglio credi. Di solito è buona norma utilizzare un file per ogni classe. Quindi devi solo copiare ogni classe in un nuovo file e salvarlo con il nome della classe (ricordandoti le varie import).

    Ti puoi fare la classe GUI che estende JFrame (e che di conseguenza è una finestra), che è la finestra principale (quella che io ho chiamato proprio Finestra). Al suo interno dichiari i componenti che vuoi e volendo (se ti serve) i riferimento alle altre finestre.

    Tornando alle 3 righe di codice qui sopra nel tag CODE, non puoi scriverle "nel JButton" in quanto il JButton è solo il componente. Se lo clicchi allora viene generato un evento ActionEvent, e viene in pratica gestito in actionPerformed(). Se hai più bottoni registrati con un ActionListener, ipotizzando di avere il codice scritto come li sopra (ma con più bottoni), dovrai anche ottenere il bottone che è stato premuto, così risponderai a quella determinata azione. Ci sono due modi per conoscere quale bottone è stato premuto:

    1)
    codice:
    public void actionPerformed(ActionEvent ae) {
      String title = ae.getText();
    
      if(title.equals("Testo Bottone1")) {
    
      }
      else if(title.equals("Testo Bottone2")) {
    
      }
      // altro eventuale codice...
    }
    Altro metodo:
    2)
    codice:
    public void actionPerformed(ActionEvent ae) {
      JButton btn = (JButton) ae.getSource();
    
      if(btn == scelta) {
        // apri la finestra creandola come ho mostrato sopra...
      }
    }
    Nel primo caso confronti quindi il testo del JButton, nel secondo l'oggetto. Bada bene che il confronto avviene con il riferimento dell'oggetto; nel caso qui sopra scelta è il JButton dichiarato come nel mio precedente codice. Il metodo getSource() ritorna appunto chi ha generato l'evento.

    Qui c'è l'API di JButton: http://docs.oracle.com/javase/7/docs...g/JButton.html

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.