Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [JAVA] Chiudere un frame

    Ciao a tutti!!
    Ho un piccolo problema con i frames: non riesco a chiuderli.
    Ho provato usando:


    codice:
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    che però credo vada bene solo per i Jframe, e con

    codice:
    private void chiudiFrame() {
        dispose(); }
    ma evidentemente non so come gestirlo...
    qualcuno può darmi una dritta su come posso fare?

    Grazie...
    Gato

  2. #2
    Cosa intendi per chiudere?
    Se intendi terminare il programma usa JFrame.EXIT_ON_CLOSE
    Altrimenti dovrebbero chiudersi come comportamento di default.
    Coltiva Linux, Windows si pianta da solo!

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [JAVA] Chiudere un frame

    Originariamente inviato da fpertegato
    che però credo vada bene solo per i Jframe, e con
    Quindi tu stai usando java.awt.Frame?

    Se sì, aggiungi un WindowListener a esso e ridefiniscine il metodo windowClosing.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Lo sto implementando...grazie, ora provo e poi vi so dire com'è andata!
    Grazie!!
    Gato

  5. #5
    Posto qui di seguito il codice:
    codice:
    import java.awt.*;
    import java.awt.event.*;
    public class Bottone extends Frame
    {
    
    // Costruttore classe Bottone
    Button cliccami=new Button("Cliccami");
    Label cliccato=new Label("Non mi hai cliccato nemmeno una volta");
    
    public Bottone()
    {
    cliccami.addActionListener(new Ascoltatore());
    // setup comando
    cliccami.setActionCommand("CLICK");
    // Aggiungo il bottone e la label al Frame.
    
    add(cliccami, BorderLayout.NORTH);
    add(cliccato, BorderLayout.SOUTH);
    // metodi di Frame
    pack();
    setVisible(true);
    }
    // main
    public static void main (String [] arg)
    {
    new Bottone();
    }
    // Ascoltatore di eventi Action
    int Volte=2;
    public class Ascoltatore implements ActionListener
    {
    public void actionPerformed (ActionEvent e)
    {
    String Comando=e.getActionCommand();
    if (Comando.compareTo("CLICK")==0)
    {
    cliccato.setText("Mi hai cliccato");
    cliccami.setLabel("Ricliccami");
    cliccami.setActionCommand("RECLICK");
    };
    if (Comando.compareTo("RECLICK")==0)
    cliccato.setText("Mi hai cliccato "+(Volte++)+" volte.");
    }
    }// Fine Ascoltatore
    //Window listener
    class BottoneWindowListener implements WindowListener
    {
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }
    }// Fine Bottone
    Come vedi ho provato ad usare un WindowListener, ma il risultato è l'errore:
    codice:
    Bottone.java:60: reached end of file while parsing
    }// Fine Bottone
    che oltretutto non capisco cosa centri...
    Gato

  6. #6
    Ho provato modificando così il codice:
    codice:
    ...
    }
    } // Fine Ascoltatore
    //Window listener
    class BottoneWindowListener implements WindowListener
    {
    public void windowClosed(WindowEvent e){
    }
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    } // Fine Window Listener
    } // Fine Bottone
    }
    ma ora in compilazione mi dice che Bottone.BottoneWindowListener non è un metodo astratto e non sovrascrive windowDeactivated(java.awt.event.WindowEvent) in java.awt.event.WindowListener... :master:
    Gato

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da fpertegato
    ma ora in compilazione mi dice che Bottone.BottoneWindowListener non è un metodo astratto e non sovrascrive windowDeactivated(java.awt.event.WindowEvent) in java.awt.event.WindowListener... :master:
    WindowListener è un'interfaccia che oltre a windowClosing dichiara altri metodi.

    Hai due possibilità:
    1 - scrivi anche tutti gli altri metodi (se non ti servono li lasci vuoti)
    2 - al posto di implementare WindowListener estendi WindowAdapter

    Piccolo suggerimento: implementare i gestori di eventi come stai facendo ora è prolisso. Puoi sfruttare le classi interne anonime.
    codice:
    ...
    this.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Ho provato usando il metodo che mi hai proposto:
    codice:
    ...
    this.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
    ma non conosco WindowAdapter(), così ho presto provato ad implementarli tutti scrivendo così:
    codice:
    import java.awt.*;
    import java.awt.event.*;
    public class Bottone extends Frame
    {
    
    // Costruttore classe Bottone
    Button cliccami=new Button("Cliccami");
    Label cliccato=new Label("Non mi hai cliccato nemmeno una volta");
    
    public Bottone()
    {
    cliccami.addActionListener(new Ascoltatore());
    // setup comando
    cliccami.setActionCommand("CLICK");
    // Aggiungo il bottone e la label al Frame.
    
    add(cliccami, BorderLayout.NORTH);
    add(cliccato, BorderLayout.SOUTH);
    // metodi di Frame
    pack();
    setVisible(true);
    }
    // main
    public static void main (String [] arg)
    {
    new Bottone();
    }
    // Ascoltatore di eventi Action
    int Volte=2;
    public class Ascoltatore implements ActionListener
    {
    public void actionPerformed (ActionEvent e)
    {
    String Comando=e.getActionCommand();
    if (Comando.compareTo("CLICK")==0)
    {
    cliccato.setText("Mi hai cliccato");
    cliccami.setLabel("Ricliccami");
    cliccami.setActionCommand("RECLICK");
    };
    if (Comando.compareTo("RECLICK")==0)
    cliccato.setText("Mi hai cliccato "+(Volte++)+" volte.");
    }
    } // Fine Ascoltatore
    
    //Window listener
    class BottoneWindowListener implements WindowListener
    {
    public void windowActivated(WindowEvent e)
    {
    System.out.println("Sentito un Window Activated");
    }
    public void windowClosed(WindowEvent e)
    {
    System.out.println("Sentito un Window Closed");
    }
    public void windowClosing(WindowEvent e)
    {
    System.out.println("Sentito un Window Closing");
    System.exit(0);
    }
    public void windowDeactivated(WindowEvent e)
    {
    System.out.println("Sentito un Window Deactivaded");
    }
    public void windowDeiconified(WindowEvent e)
    {
    System.out.println("Sentito un Window Deiconified");
    }
    public void windowIconified(WindowEvent e)
    {
    System.out.println("Sentito un Window Iconified");
    }
    public void windowOpened(WindowEvent e)
    {
    System.out.println("Sentito un Window Opened");}// Fine Window Listener
    }
    } // Fine Bottone
    il compilatore non ha rilevato problemi, ma lanciato il programma non riesco a chiuderlo usando la X...
    Gato

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    A parte il fatto che dovresti prendere confidenza con l'indentazione del codice (sia per te che per noi), tu hai correttamente implementato WindowListener... ma non hai registrato il listener sul Frame.

    Nel costruttore della classe, devi aggiungere questa riga di codice:

    codice:
    addWindowListener( this );

    Ti consiglio, comunque, di prendere visione del tutoria della Sun: imparare a usare le GUI senza seguire un filo logico non è costruttivo.


    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

  10. #10
    Già, è quello che sto tentando di fare (prendere confidenza...) ma essendo nuovo di java e non capendo troppo l'inglese faccio parecchia fatica!
    Non c'è un sito simile in italiano?
    Gato

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.