Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    90

    chiudere un frame da Button e buona programmazione con java.awt

    Salve
    sto imparando ad usare awt guardando in giro per internet guide e tutorial e mi chiedevo se ho capito bene e il mio approccio è corretto.
    Vorrei implementare una classe che apra una finestra che preveda solo una lista per la selezione tra più opzioni. Una volta selezionata l'opzione desiderata si accede direttamente ad un'altra finestra nella quale si possono fare varie cose.
    Ho due dubbi: visto il codice,

    codice:
    import java.awt.*;
    import java.awt.event.*;
    
    public class Start extends Frame
    {
    	List lista = new List(0, false);
    	public Start()
    	{	
    		super("Seleziona il tipo di dati");
    		lista.add("String");
    		lista.add("Integer");
    		lista.add("Double");
    		lista.addItemListener(new AscoltaLista());
    		add(lista);
    		pack();
    
    		setLocation(100,100);
    		setSize(400, 400);
    		setVisible(true);
    	}
    
    	public static void main(String[] arg)
    	{
    		new Start();
    	}
    
    
    	public class AscoltaLista implements ItemListener{
    
    		public void itemStateChanged(ItemEvent e) {
    			int el = ((Integer) e.getItem());
    			if (el == 0) {
    				((Component) e.getSource()).getParent().setVisible(false); 
    				//qui inizializza un nuovo oggetto di una seconda classe 
    che (in qualche modo) dovrebbe aprire una seconda finestra. 
    			}
    		}
    
    	}
    
    
    }
    la sentenza in rosso certamente funziona, ma... si usa? è buona programmazione? come bisognerebbe fare altrimenti?
    dove c'è il commento, come dovrei fare questa presunta classe che apra una seconda finestra? dovrei farla che estenda Frame e che nel costruttore crei una finestra etc etc?
    E il domandone, soprattutto: se poi volessi tornare alla schermata iniziale (finestra con opzioni), ad un certo punto dell'esecuzione della seconda classe come dovrei fare?!
    Non trovo esempi che mi illuminino su questo punto!
    Se hai paura di chiedere, vuol dire che ti vergogni ad imparare...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: chiudere un frame da Button e buona programmazione con java.awt

    Originariamente inviato da Eberk89
    int el = ((Integer) e.getItem());
    Se gli elementi nella List sono delle stringhe .... perché fai il cast a Integer??? È sbagliato.

    Originariamente inviato da Eberk89
    ((Component) e.getSource()).getParent().setVisible(false);

    la sentenza in rosso certamente funziona, ma... si usa? è buona programmazione?
    No, non è molto appropriato. Non mi riferisco tanto al fatto di usare getSource() (questo si usa tipicamente per distinguere la sorgente dell'evento qualora il listener fosse registrato su più componenti), ma a tutto il giro per cui dal componente prendi il parente ecc...

    Originariamente inviato da Eberk89
    come bisognerebbe fare altrimenti?
    Semplicemente:

    setVisible(false);

    Perché il metodo setVisible() di Frame è "in scope" in quel punto!!

    La inner class AscoltaLista sarebbe anche più appropriato renderla private e non public.

    Originariamente inviato da Eberk89
    dove c'è il commento, come dovrei fare questa presunta classe che apra una seconda finestra? dovrei farla che estenda Frame e che nel costruttore crei una finestra etc etc?
    Crei un'altra classe che estende Frame e nel cui costruttore inizializzi i componenti. Se il setVisible(true) lo fai anche qui nel costruttore, in quel punto del commento ti basterà fare:

    new AltraFinestra();

    Originariamente inviato da Eberk89
    E il domandone, soprattutto: se poi volessi tornare alla schermata iniziale (finestra con opzioni), ad un certo punto dell'esecuzione della seconda classe come dovrei fare?!
    Se in AltraFinestra avessi il riferimento alla istanza di Start, basterebbe fare di nuovo start.setVisible() (start potrebbe essere una variabile di tipo Start in AltraFinestra).
    Altrimenti anche più banalmente fare un new Start(). Ovviamente sarebbe un'altra istanza!

    Comunque quando si devono fare "passaggi" di questo tipo andrebbe valutato molto bene il design delle classi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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 © 2024 vBulletin Solutions, Inc. All rights reserved.