Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [JAVA] chiudere Jframe in swing

    Salve a tutti ho un grosso problema per concludere la mia tesi... devo fare un gioco java simile al milionario con 10 domane e quindi 10 finestre...io vorrei che quando rispondi a una domanda ti si aprisse una nuova finestra ma che quella precedente ti si chiuda.. mentre invece arrivo alla fine del gioco con 10 finestre aperte sulla barra di win.. allora ho provato sia con il setvisible che con il getcontentpane ma nulla..

    cerco di essere piu chiaro, prendo due generiche finestre che contengono 2 domande diverse, vorrei che mi diceste il codice da inserire nell azione associata al pulsante per aprire la nuova finestra e chiudere quella corrente..
    panel è il pannello da chiudere e Quiz q2 quello da visualizzare. Cosi mi visualizza q2 ma mi rimane in background q1 ovvero panel...
    Ho un solo main nella prima finestra del gioco che crea un istanza della prima domanda e me la rende visibile. Quello che penso è che dal punto in cui io voglio chiudere il jframe non si possa perchè sono all'interno di un jpanel.. AIUTO!!!
    codice:
    public Quiz(final Calcola ris)
    	{
    		final JPanel panel = new JPanel();
    		panel.setLayout(null);
    		panel.setBackground(Color.ORANGE);
    		setTitle("DOMANDA 1");
    		setSize(larghezza,altezza);
    
                              JButton a = new JButton("1");
    		a.setEnabled(true);
    		a.setBounds(200,300,200,100);
    		a.setFont(new java.awt.Font("", 1, 30)); 
    		panel.add(a);
    		a.addActionListener(new ActionListener()
    		{
    		public void actionPerformed(ActionEvent e)
    			{
    			try
    			{
    		
    			Quiz2 q2 = new Quiz2(ris);
    			q2.setVisible(true);
    			}
    			catch(Exception e1){}
    			}
    		});

  2. #2
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Premetto che non sono sicuro perchè non molto ferrato in java....

    Mettendo il caso che "wh" è l'ascoltatore della tua finestra da chiudere:

    codice:
    WindowHandler wh = new WindowHandler();
    addWindowListener(wh);
    
    
    private class WindowHandler extends WindowAdapter {
    		public void windowClosing(WindowEvent e) {
    
    			dispose();
    			try {
    				c.close();
    			} 
    
    			catch (SQLException sqle){}
    		}
    
    	}
    Insomma... quello che interessa a te è il "dispose()"...

    A presto... e spero di esserti stato d'aiuto... ciaoo

  3. #3
    Basta che nella actionPerformed del pulsante richiami il metodo dispose() sulla finestra che vuoi chiudere
    Al mio segnale... scatenate l'inferno!

  4. #4
    Ragazzi il dispose lo posso chiamare sull'oggetto creato nel main, oggetto che estendendo jframe posso chiudere... pero' quando premo il pulsante io sono nella classe e ho solo il Jpanel a disposizione!!! non posso chiudere il frame dichiarato nel main!!!

    guardate
    codice:
    public class pag1 extends JFrame
    {
    	int altezza = 768;
    	int larghezza = 1024;
    	
    	public pag1()
    	{
    		//PANNELLO
    		final JPanel panel = new JPanel();
    		panel.setLayout(null);
    		setTitle("GIOCO");
    		setSize(larghezza,altezza);
    		
    		JLabel scritta = new JLabel("SCEGLI IL GIOCO CHE VUOI FARE");
    		scritta.setFont(new java.awt.Font("", 1, 30)); 
    		scritta.setBounds(300,50,500,100);
    		panel.add(scritta);
    
    		//BOTTONE
    		/* BOTTONE test */
    		JButton quiz = new JButton("QUIZ");
    		quiz.setEnabled(true);
    		quiz.setBounds(420,200,250,80);
    		quiz.setFont(new java.awt.Font("", 1, 30)); 
    		panel.add(quiz);
    		quiz.addActionListener(new ActionListener()
    				{
    					public void actionPerformed(ActionEvent e)
    					{
    						try
    						{
    								final Calcola ris = new Calcola();
    								Quiz q = new Quiz(ris);
    								q.setVisible(true);			
    						}
    						catch(Exception e1){}
    					}
    				});
    		
    		
    		//BOTTONE
    		JButton abbina = new JButton("ABBINAMENTI");
    		abbina.setEnabled(true);
    		abbina.setBounds(420,400,250,80);
    		abbina.setFont(new java.awt.Font("", 1, 30)); 
    		panel.add(abbina);
    		abbina.addActionListener(new ActionListener()
    				{
    					public void actionPerformed(ActionEvent e)
    					{
    						try
    						{
    								//Abbina a = new Abbina();
    								//a.setVisible(true);
    						}
    						catch(Exception e1){}
    					}
    				});
    
    		//SFONDO
    		ImageIcon immagine=new ImageIcon("bart.jpg"); 
    		JLabel label = new JLabel(immagine);
    		label.setBounds(0,0,1024,768);
    		panel.add(label);
    		
    		getContentPane().add(panel);
    
    	}
    	public static void main (String[] args)
    	{
    		pag1 pag = new pag1();
    		pag.setVisible(true);
    		
    	}
    }
    io nel codice del bottone devo chiudere pag dichiarato nel main!!!

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Finestre e altri controlli non si dichiarano mai all'interno di un metodo (a meno che non debbano rimanere locali ad esso), ma sempre a livello di classe.

    O dichiari a livello di classe oppure passi ciascun oggetto al metodo che lo deve usare.

    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

  6. #6
    Ho risolto mettendo in una stessa classe che estende jframe tutti pannelli e lavorando cosi sul getContentPane().add/remove di pannelli dichiarati li... viene un casino ma almeno funziona!! Grazie per i consigli cmq.. ciauuu

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.