Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    115

    problema con una finestra

    salve ragazzi ho un problemino penso sia semplice ma non ho idea di come posso risolverlo...in pratica ho questo programmino d'esempio (preso da un libro) che attraverso il pulsante "new" crea un frame...ma se si preme nuovamente si crea un altro frame e cosi via...sia ha cosi un multicasting....ora io vorrei far aprire solo 1 frame...e non come fa il programma che ne apre quanto ne voglio...una possibile soluzione secome me protrebbe essere disabilitare il pulsante new appena si apre il primo frame... ma come posso scriverla questa istruzione???
    grazie per l'aiuto

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class MulticastTest
    {
       public static void main(String[] args)
       {
          MulticastFrame frame = new MulticastFrame();
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setVisible(true);
       }
    }
    
    /**
       A frame with buttons to make and close secondary frames
    */
    class MulticastFrame extends JFrame
    {
       public MulticastFrame()
       {
          setTitle("Calcolo Parcelle");
          setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    
          // add panel to frame
    
          MulticastPanel panel = new MulticastPanel();
          add(panel);
       }
    
       public static final int DEFAULT_WIDTH = 300;
       public static final int DEFAULT_HEIGHT = 200;  
    }
    
    /**
       A panel with buttons to create and close sample frames.
    */
    class MulticastPanel extends JPanel
    {
       public MulticastPanel()
       {
          // add "New" button
    
          JButton newButton = new JButton("New");
          add(newButton);
          final JButton closeAllButton = new JButton("Close all");
          add(closeAllButton);
    
          ActionListener newListener = new 
             ActionListener()
             {
                public void actionPerformed(ActionEvent event)
                {
                   BlankFrame frame = new BlankFrame(closeAllButton);
                   frame.setVisible(true);
                }
             };
             newButton.addActionListener(newListener);
    
       }
    }
    
    /**
       A blank frame that can be closed by clicking a button.
    */
    class BlankFrame extends JFrame
    {
       /**
          Constructs a blank frame
          @param closeButton the button to close this frame
       */
       public BlankFrame(final JButton closeButton)
       {
          counter++;
          setTitle("Frame " + counter);
          setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
          setLocation(SPACING * counter, SPACING * counter);     
          
          closeListener = new 
             ActionListener()
             {
                public void actionPerformed(ActionEvent event)
                {
                   closeButton.removeActionListener(closeListener);
                   dispose();
                }
             };
          closeButton.addActionListener(closeListener);
       }
    
       private ActionListener closeListener;
       public static final int DEFAULT_WIDTH = 200;
       public static final int DEFAULT_HEIGHT = 150;  
       public static final int SPACING = 40;
       private static int counter = 0;
    }

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    BlankFrame frame = new BlankFrame(closeAllButton);
    frame.setVisible(true);
    In questo caso frame è una variabile locale dichiarata all'interno del metodo actionListener.
    Nella classe che contiene la dichiarazione di questo metodo dichiara la variabile BlankFrame frame di accesso pubblico.
    Prima di istanziare la nuova BlankFrame verifiche che la variabile frame sia nulla prima di istanziarne un'altra.
    Importante è che quando la classe BlankFrame chiama dispose() la variabile presente in MulticastPanel non viene aggiornata.
    Una soluzione potrebbe esser quella di passare alla funzione BlankFrame oltre a closeAllButton anche this ( riferimento alla classe MulticastPanel ) e prima di fare la chiamata al metodo dispose() fare riferimentoAllaClasseMPanel.frame = null;

    In questo modo possiamo controllare di non istanziare infinite frame....
    Se non sono stato chiaro chiedi!
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    115

    errore

    humm...
    questa è la prima modifica che dovrei fare:

    BlankFrame frame = new BlankFrame(closeAllButton,MulticastPanel);

    poi pero prima di dispose() come dovrei scrivere...perche non mi è tanto chiaro...
    grazie 1000 per l'aiuto...

  4. #4
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537

    Re: errore

    Originariamente inviato da cobraa
    humm...
    questa è la prima modifica che dovrei fare:

    BlankFrame frame = new BlankFrame(closeAllButton,MulticastPanel);

    poi pero prima di dispose() come dovrei scrivere...perche non mi è tanto chiaro...
    grazie 1000 per l'aiuto...
    Dovresti fare ....
    codice:
    new BlankFrame( closeAllButton , this );
    Poi nel costruttore di BlankFrame aggiungere il parametro:
    codice:
    .....public BlankFrame( finale JButton closeAllButton , MulticastPanel pannello ){
          this.pannello = pannello;
    ....
    ...
    }
    Ricordandoti di aggiungere la variabile MulticastPanel pannello;

    Prima del .dispose() scrivi
    codice:
    pannello.frame = null;
    anche qui ricordandoti che frame deve esser dichiarato fruori dal metodo actionListener e visibilità public.
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  5. #5
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Altrimenti puoi dichiarare il frame come public final, in questo modo però non è modificabile nelle sue proprietà....e sinceramente non è una bella cosa....però è sempre una soluzione, tutto dipende da quello che vuoi fare.
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

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.