Page 3 of 3 FirstFirst 123
Results 31 to 44 of 44

Thread: Aprire/chiudere finestre con Swing

  1. #31
    Warrant Officer marlborojack's Avatar
    Join Date
    Mar 2009
    Location
    Pisa
    Posts
    3.215

    Default

    Setvisible lo fa sparire, dovresti usare la dispose, ma usarla dopo che ti sei connesso se vuoi farla sparire dopo la connessione, per cui a occhio la dispose la devi chiamare su this nel listener della connessione (bottone di connessione)
    Happiness in intelligent people is the rarest thing I know.

  2. #32
    Hador's Avatar
    Join Date
    Mar 2004
    Location
    Milano
    Posts
    31.321

    Default

    funzia uguale (tolto i menù almeno si capisce)
    Code:
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.Rectangle;
    import javax.swing.JButton;
    import javax.swing.JDesktopPane;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    public class Bella {
    private JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="10,10"
    private JPanel jContentPane = null;
    private JDesktopPane jDesktopPane = null;
    private JButton jButton = null;
    private JFrame jFrame1 = null;  //  @jve:decl-index=0:visual-constraint="418,16"
    private JPanel jContentPane1 = null;
    private JDesktopPane jDesktopPane1 = null;
    private JButton jButton1 = null;
    /**
    * This method initializes jFrame
    * 
    * @return javax.swing.JFrame
    */
    private JFrame getJFrame() {
    if (jFrame == null) {
    jFrame = new JFrame();
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jFrame.setSize(282, 191);
    jFrame.setContentPane(getJContentPane());
    jFrame.setTitle("Frame2");
    }
    return jFrame;
    }
    /**
    * This method initializes jContentPane
    * 
    * @return javax.swing.JPanel
    */
    private JPanel getJContentPane() {
    if (jContentPane == null) {
    jContentPane = new JPanel();
    jContentPane.setLayout(new BorderLayout());
    jContentPane.add(getJDesktopPane(), BorderLayout.CENTER);
    }
    return jContentPane;
    }
    /**
    * This method initializes jDesktopPane	
    * 	
    * @return javax.swing.JDesktopPane	
    */
    private JDesktopPane getJDesktopPane() {
    if (jDesktopPane == null) {
    jDesktopPane = new JDesktopPane();
    jDesktopPane.add(getJButton(), null);
    }
    return jDesktopPane;
    }
    /**
    * This method initializes jButton	
    * 	
    * @return javax.swing.JButton	
    */
    private JButton getJButton() {
    if (jButton == null) {
    jButton = new JButton();
    jButton.setBounds(new Rectangle(56, 27, 173, 96));
    jButton.setText("BUSONE");
    }
    return jButton;
    }
    /**
    * This method initializes jFrame1	
    * 	
    * @return javax.swing.JFrame	
    */
    private JFrame getJFrame1() {
    if (jFrame1 == null) {
    jFrame1 = new JFrame();
    jFrame1.setSize(new Dimension(280, 189));
    jFrame1.setTitle("Frame1");
    jFrame1.setContentPane(getJContentPane1());
    }
    return jFrame1;
    }
    /**
    * This method initializes jContentPane1	
    * 	
    * @return javax.swing.JPanel	
    */
    private JPanel getJContentPane1() {
    if (jContentPane1 == null) {
    jContentPane1 = new JPanel();
    jContentPane1.setLayout(new BorderLayout());
    jContentPane1.add(getJDesktopPane1(), BorderLayout.CENTER);
    }
    return jContentPane1;
    }
    /**
    * This method initializes jDesktopPane1	
    * 	
    * @return javax.swing.JDesktopPane	
    */
    private JDesktopPane getJDesktopPane1() {
    if (jDesktopPane1 == null) {
    jDesktopPane1 = new JDesktopPane();
    jDesktopPane1.add(getJButton1(), null);
    }
    return jDesktopPane1;
    }
    /**
    * This method initializes jButton1	
    * 	
    * @return javax.swing.JButton	
    */
    private JButton getJButton1() {
    if (jButton1 == null) {
    jButton1 = new JButton();
    jButton1.setBounds(new Rectangle(52, 18, 174, 113));
    jButton1.setText("AXET");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
    getJFrame().setVisible(true);
    getJFrame1().dispose();
    }
    });
    }
    return jButton1;
    }
    /**
    * Launches this application
    */
    public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    Bella application = new Bella();
    application.getJFrame1().setVisible(true);
    }
    });
    }
    }

  3. #33
    Lieutenant Commander Axet's Avatar
    Join Date
    Sep 2003
    Location
    Ginevra
    Posts
    33.807

    Default

    Quote Originally Posted by marlborojack View Post
    Setvisible lo fa sparire, dovresti usare la dispose, ma usarla dopo che ti sei connesso se vuoi farla sparire dopo la connessione, per cui a occhio la dispose la devi chiamare su this nel listener della connessione (bottone di connessione)
    Esattamente quello che ho appena fatto e funziona, la nuova finestra poi la apro nella gestione della chiusura.

    Quello che mi lascia perplesso però è che sono sicuro al 1000000% di aver già provato a mettere la dispose nell'actionperformed ma mi ha sempre dato errore. Ora cercando di implementare l'idea che mi è venuta ieri ho riprovato anche a fare sta cosa e me l'ha presa.. nc.

    Vabbè che non c'è da stupirsi, io ho impostato il tutto affinchè la finestra che volevo tanto chiudere appaia nel centro dello schermo. Una volta su tre appare nel centro, le altre due nell'angolo in alto a sinistra.
    Che figata swing!

    Cmq risolto il problema

    edit@hador:
    si ma quella roba lì fa System.exit eh hador
    Inoltre è il frutto di un editor, anche io voglio un editor >_< (non è vero ho netbeans ma non lo uso )

    riedit:
    no però c'è un dispose infilato dentro da qualche parte.. ma siam sicuri che dispose funziona se non si imposta come defaultCloseOperation(DISPOSE_ON_CLOSE) ?
    Last edited by Axet; 12th July 2009 at 11:51.

    I'm no hero. Never was. Never will be.
    -----
    Soul of the mind, key to life's ether
    Soul of the lost, withdrawn from its vessel
    May strength be granted so the world might be mended...
    So the world might be mended...

  4. #34
    Hador's Avatar
    Join Date
    Mar 2004
    Location
    Milano
    Posts
    31.321

    Default

    se avessi aperto l'applicazione avresti visto che non lo avevo linkato sulla X ma sul bottone AXET
    l'editor lo hai e non usarlo è farsi del male da soli, tra l'altro io lo uso su linux rsa mi par strano non vada su mac, abbiamo roba da 2k dollari aggratis e non la vuoi usare perchè non ti piace
    Last edited by Hador; 12th July 2009 at 12:03.

  5. #35
    Warrant Officer marlborojack's Avatar
    Join Date
    Mar 2009
    Location
    Pisa
    Posts
    3.215

    Default

    Quote Originally Posted by Axet View Post
    riedit:
    no però c'è un dispose infilato dentro da qualche parte.. ma siam sicuri che dispose funziona se non si imposta come defaultCloseOperation(DISPOSE_ON_CLOSE) ?
    certo, con quel comando dici solo al frame di chiamare la dispose in risposta all'evento close, che in un jframe viene triggerato dal bottone chiudi della finestra e dal segnale di chiusura del sistema operativo (alt-f4), in quel modo ad esempio puoi ridefinire la dispose evitando di reimplementare anche il listener

    EDIT: forse ho capito male. Di sicuro, se tu non setti defaultCloseOperation(DISPOSE_ON_CLOSE) la dispose non viene chiamata automaticamente, se non ricordo male di default c'è EXIT_ON_CLOSE che equivale a System.Exit(non_so_che_int_ma_penso_1). Per cui se vuoi che la dispose sia chiamata in risposta all'evento del bottone devi mettere la riga defaultCloseOperation(DISPOSE_ON_CLOSE). Se invece la dispose la chiami tu, allora distrugge la finestra eseguendo il distruttore di default, che a sua volta esegue il distruttore su tutti gli oggetti del jframe e poi su sè stesso.
    Last edited by marlborojack; 12th July 2009 at 12:15.
    Happiness in intelligent people is the rarest thing I know.

  6. #36
    Lieutenant Commander Axet's Avatar
    Join Date
    Sep 2003
    Location
    Ginevra
    Posts
    33.807

    Default

    Non hai capito, nel codice postato da hador viene infilata una dispose nel codice nonostante il metodo di chiusura sia EXIT_ON_CLOSE. Questo non dovrebbe quindi portare al non far succedere un tubo? Ho fatto delle prove e così facendo la dispose è inutile mi sa.. discorso diverso se si usa DISPOSE_ON_CLOSE, usando la dispose viene "triggerato" l'evento di chiusura della finestra gestito poi dal windowadapter (o windowlistener, pressochè la stessa cosa).

    I'm no hero. Never was. Never will be.
    -----
    Soul of the mind, key to life's ether
    Soul of the lost, withdrawn from its vessel
    May strength be granted so the world might be mended...
    So the world might be mended...

  7. #37
    Hador's Avatar
    Join Date
    Mar 2004
    Location
    Milano
    Posts
    31.321

    Default

    il mio metodo funziona, c'è il main lancialo e vedi tu stesso

  8. #38
    Lieutenant Commander Axet's Avatar
    Join Date
    Sep 2003
    Location
    Ginevra
    Posts
    33.807

    Default

    Quote Originally Posted by Hador View Post
    il mio metodo funziona, c'è il main lancialo e vedi tu stesso
    Ovvio è autogenerato

    Rileggendomi non son stato chiaro, in sintesi intendevo che non capisco il senso di quella dispose piazzata lì così senza che il metodo di chiusura sia impostato su DISPOSE_ON_CLOSE

    I'm no hero. Never was. Never will be.
    -----
    Soul of the mind, key to life's ether
    Soul of the lost, withdrawn from its vessel
    May strength be granted so the world might be mended...
    So the world might be mended...

  9. #39
    Hador's Avatar
    Join Date
    Mar 2004
    Location
    Milano
    Posts
    31.321

    Default

    no bhe la dispose e il visibility ce li ho apppiccicati io, è il resto che ho fatto con l'editor grafico
    infatti potrebbero non essere concettualmente esatti, ma faccio fatica a capire perchè la mia soluzione, che mi pare la più demenziale, non dovrebbe andar bene.
    non conosco affatto swing ho messo la dispose perchè lo ha detto marlbo, io avevo messo il setvisibility come avevi scritto tu all'inizio

  10. #40
    Warrant Officer marlborojack's Avatar
    Join Date
    Mar 2009
    Location
    Pisa
    Posts
    3.215

    Default

    Quote Originally Posted by Axet View Post
    Ovvio è autogenerato
    Rileggendomi non son stato chiaro, in sintesi intendevo che non capisco il senso di quella dispose piazzata lì così senza che il metodo di chiusura sia impostato su DISPOSE_ON_CLOSE
    Significa che sei tu a chiudere la finestra, ma se usi il tasto di chiusura o ALT-F4 (credo) allora non chiama la dispose bensì la System.Exit.

    @Hador, è ovviamente corretta per il bottone AXET, se vuoi che la dispose sia chiamata su tutti gli eventi di chiusura, come ho scritto sopra, devi anche settare DISPOSE_ON_CLOSE piuttosto che exit
    Last edited by marlborojack; 12th July 2009 at 14:04.
    Happiness in intelligent people is the rarest thing I know.

  11. #41
    Hador's Avatar
    Join Date
    Mar 2004
    Location
    Milano
    Posts
    31.321

    Default

    capito la differenza, io cmq ho messo il bottone perchè avevo capito dovessi confermare user e name, se fai la x sulla finestra di login non so che succeda

  12. #42
    Lieutenant Commander Alkabar's Avatar
    Join Date
    Feb 2004
    Location
    Netherlands.
    Posts
    19.975

    Default

    Se non vi piace Swing, provate JavaFX.

  13. #43
    Lieutenant Commander Axet's Avatar
    Join Date
    Sep 2003
    Location
    Ginevra
    Posts
    33.807

    Default

    JavaFX è quello su cui si basa l'editor grafico di netbeans, no?
    Boh l'ho provato un po' l'altro giorno, comodo per creare le finestre ma alla fine mi risultava quasi più incasinato perchè cmq le mani dentro ce le devi ovviamente mettere tu e non avendo scritto il codice in prima battuta mi trovo quasi più spaesato.

    Certo una volta che ci prendi la mano dev'essere N volte più comodo, ma non ho voglia di sbatterci la testa ora

    I'm no hero. Never was. Never will be.
    -----
    Soul of the mind, key to life's ether
    Soul of the lost, withdrawn from its vessel
    May strength be granted so the world might be mended...
    So the world might be mended...

  14. #44
    Lieutenant Commander Alkabar's Avatar
    Join Date
    Feb 2004
    Location
    Netherlands.
    Posts
    19.975

    Default

    Quote Originally Posted by Axet View Post
    JavaFX è quello su cui si basa l'editor grafico di netbeans, no?
    Boh l'ho provato un po' l'altro giorno, comodo per creare le finestre ma alla fine mi risultava quasi più incasinato perchè cmq le mani dentro ce le devi ovviamente mettere tu e non avendo scritto il codice in prima battuta mi trovo quasi più spaesato.

    Certo una volta che ci prendi la mano dev'essere N volte più comodo, ma non ho voglia di sbatterci la testa ora
    E' un linguaggio dichiarativo in termini di scripts per definire finestre un pelino piu' carine graficamente in Java.

Page 3 of 3 FirstFirst 123

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
[Output: 102.04 Kb. compressed to 87.13 Kb. by saving 14.91 Kb. (14.61%)]