Visualizzazione dei risultati da 1 a 4 su 4

Discussione: "Navigare" trai Jpanel

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di joker06
    Registrato dal
    Dec 2006
    Messaggi
    782

    "Navigare" trai Jpanel

    Ciao,
    premettendo che sono al limite del ridicolo con java ...

    dopo aver studiato guide cartacee, guide online provato a fare i programmini esempio etc etc ...

    sto cercando di realizzare un interfaccia grafica per un programmino che sto scrivendo.

    Creo il Jframe, gli aggiungo il menu e qua cominciano i problemi.

    Inserisco un jpanel con solo la scritta "test", vorrei che cliccando su un item del menu chiudesse questo jpanel e ne aprisse uno nuovo richiamato.
    il massimo che sono riuscito a fare è stato la visualizzizazione del nuovo jpanel che pero si sovrapponeva e basta a quello da chiudere e quindi si vedeva un accozzaglia di scritte

    Partiamo da:
    è la giusta strada? tengo un jframe come contenitore e dentro cambio i vari jpanel? è il giusto approccio?

    i vari jpanel li posso creare direttamente dentro un metodo e poi aggiungerli al jframe tramite l' add()?

    avete qualche esempio di come si utilizzano gli actionlistener per la gestione dei Jpanel?

  2. #2
    Quote Originariamente inviata da joker06 Visualizza il messaggio
    è la giusta strada? tengo un jframe come contenitore e dentro cambio i vari jpanel? è il giusto approccio?
    Ma non è meglio creare un tabbedPane che ti permette di switchare tra i vari panels?


    Quote Originariamente inviata da joker06 Visualizza il messaggio
    i vari jpanel li posso creare direttamente dentro un metodo e poi aggiungerli al jframe tramite l' add()?
    Certo, come tutti i component di Swing (JLabel, JTextField, e così via...).


    Quote Originariamente inviata da joker06 Visualizza il messaggio
    avete qualche esempio di come si utilizzano gli actionlistener per la gestione dei Jpanel?
    Cosa serve l'actionListener per un panel?
    Serve ed esiste per i bottoni, ma per un panel non l'ho mai sentito.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da joker06 Visualizza il messaggio
    è la giusta strada? tengo un jframe come contenitore e dentro cambio i vari jpanel? è il giusto approccio?
    Quando diversi componenti devono occupare il medesimo spazio in tempi differenti, bisogna prestare un minimo/pochino di attenzione e gli approcci possibili sono oltretutto più di uno.

    1) L'approccio più diretto è quello di rimuovere e aggiungere fisicamente componenti dentro un contenitore. Se il contenitore ha un layout manager bisogna innanzitutto verificare i suoi vincoli e comunque togliere e inserire componenti implica che il layout va poi rivalidato.

    Il content pane di JFrame è un contenitore che ha per default un BorderLayout. Se inserisci es. nella parte CENTER un pannello:

    codice:
    Container contentPane = frame.getContentPane();
    codice:
    contentPane.add(pannello1, BorderLayout.CENTER);
    poi quando vuoi cambiare il pannello basta che fai:

    codice:
    contentPane.remove(pannello1);
    contentPane.add(pannello2, BorderLayout.CENTER);
    contentPane.validate();   // rivalida il layout

    2) Si può usare CardLayout, che è un layout manager fatto apposta per trattare i componenti come "carte" di cui solo una per volta può essere visibile. I componenti però li devi creare e inserire nel CardLayout a priori. A ogni componente puoi assegnare un valore "chiave", che tipicamente è un String.

    codice:
    CardLayout cardLayout = new CardLayout();
    contentPane.setLayout(cardLayout);
    contentPane.add(pannello1, "p1");
    contentPane.add(pannello2, "p2");
    In qualunque momento puoi fare es.:

    codice:
    cardLayout.show(contentPane, "p2");

    3) Giocare sulla "visibilità", se il layout manager permette di tenere più componenti con gli stessi vincoli, allora si rende visibile solo un componente per volta e gli altri restano non visibili. Questo è proprio quello che CardLayout fa "dietro le quinte" ma la tecnica è ovviamente anche usabile esplicitamente.


    4) Usare JTabbedPane, che ha già i comandi (le "linguette") per switchare il componente. Negli altri 3 casi citati, cosa usare (pulsanti, menù, ecc...) per switchare lo devi scegliere e implementare tu.

    Quote Originariamente inviata da joker06 Visualizza il messaggio
    avete qualche esempio di come si utilizzano gli actionlistener per la gestione dei Jpanel?
    Mio esempio "Panel Switch" tra i miei Java Examples, vedi firma.
    Ultima modifica di andbin; 02-10-2014 a 16:05
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di joker06
    Registrato dal
    Dec 2006
    Messaggi
    782
    Originariamente inviata da joker06
    avete qualche esempio di come si utilizzano gli actionlistener per la gestione dei Jpanel?



    Cosa serve l'actionListener per un panel?
    Serve ed esiste per i bottoni, ma per un panel non l'ho mai sentito.
    Mi ero spiegato veramente male, volevo dire come utilizzare actionlistener tramite i bottoni per switchare i vari jpanel a seconda del bottone premuto.

    Sono riuscito a farlo in questo modo (lo riguardero tutto seguendo quello che ha scritto andbin)

    Ho creato il JFrame, inserito menu e creato un primo JPanel (diciamo la home)

    gli item del menu richiamano:
    codice:
    
    
    codice:
    public void actionPerformed(ActionEvent ae) {    String comStr = ae.getActionCommand();
            System.out.println(comStr + " Selected");
            test(comStr);
    
          }


    test:
    codice:
    JPanel t = new JPanel();
    t.setBackground(Color.RED);
    JLabel select = new JLabel();
    t.add(select = new JLabel(c));
    window.setContentPane(t);
    ma anche se va devo rivederlo tutto e seguendo andbin utilizzare il CardLayout

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.