Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    18

    [JAVA SWING] Ordine di sovrapposizione dei JPanel

    Salve a tutti,

    la mia domanda ve la pongo tramite un esempio:

    Mettiamo il caso che io abbia una JFrame che contiene due JPanel. Entrambi hanno la dimensione massima ( quella della JFrame ) per aggiungere i due JPanel utilizzo il comando add:

    frame.add(panel1);
    frame.add(panel2);

    in base a chi aggiungo prima la visualizzazione sarà diversa: in questo caso il panel2 sarà il pannello visualizzato ( hanno tutti la stessa dimensione e posizionati alla stessa maniera).

    La mia domanda è questa:
    E' possibile cambiare l' ordine di sovrapposizione dinamicamente? e che quindi voglio che sia il panel1 che deve essere visualizzato e il panel2 deve restare "dietro"? se si come? vi ringrazio

    P.S.: i due pannelli devono avere entrambi setVisible = true, semplicemente uno in un periodo deve stare sopra l' altro e in un altro periodo l' inverso ma entrambi sempre visualizzati.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281
    Quote Originariamente inviata da ITobeI Visualizza il messaggio
    Mettiamo il caso che io abbia una JFrame che contiene due JPanel. Entrambi hanno la dimensione massima ( quella della JFrame ) per aggiungere i due JPanel utilizzo il comando add:

    frame.add(panel1);
    frame.add(panel2);
    Se il content pane di JFrame ha il BorderLayout predefinito, entrambi i pannelli andrebbero per default in CENTER ed è ovviamente scorretto perché appunto solo 1 componente va in ciascuna delle 5 aree di BorderLayout (nel tuo caso il secondo aggiunto va in CENTER).

    Quote Originariamente inviata da ITobeI Visualizza il messaggio
    E' possibile cambiare l' ordine di sovrapposizione dinamicamente? e che quindi voglio che sia il panel1 che deve essere visualizzato e il panel2 deve restare "dietro"? se si come? vi ringrazio

    P.S.: i due pannelli devono avere entrambi setVisible = true, semplicemente uno in un periodo deve stare sopra l' altro e in un altro periodo l' inverso ma entrambi sempre visualizzati.
    Dovresti precisare che cosa vuoi realizzare in generale, quali sono gli obiettivi della tua interfaccia utente.

    Se vuoi mostrare sempre e solo uno tra N componenti, c'è CardLayout (layout manager). Esiste anche JTabbedPane (componente) per questo, ma ha le "linguette" per far cambiare tab direttamente all'utente e presumo/immagino non sia quello che vuoi.
    Se invece vuoi realmente gestire in modo flessibile più componenti su "strati" differenti, esiste JLayeredPane (componente) che è fatto apposta per tenere componenti su strati differenti.

    Tieni comunque presente che il concetto di z-order è sempre stato abbastanza critico in AWT/Swing, specialmente fino a prima di Java 5. Perché lo z-order dipendeva (ed è ancora così di base) dall'ordine degli add nel contenitore. Poi da Java 5 sono stati effettivamente aggiunti dei metodi in Container per lo z-order ma è molto raro doverli usare (e va letta bene la documentazione).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    18
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Se il content pane di JFrame ha il BorderLayout predefinito, entrambi i pannelli andrebbero per default in CENTER ed è ovviamente scorretto perché appunto solo 1 componente va in ciascuna delle 5 aree di BorderLayout (nel tuo caso il secondo aggiunto va in CENTER).


    Dovresti precisare che cosa vuoi realizzare in generale, quali sono gli obiettivi della tua interfaccia utente.

    Questi due pannelli si scambiano tra loro tramite un animazione nella quale il pannello che si visualizza se ne "esce dalla JFrame" mentre sotto sta già l' altro pannello in maniera tale che si abbia una specie di effetto a libro. Quindi una volta deve stare un pannello sotto e una volta l' altro perciò mi serve un modo.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281
    Quote Originariamente inviata da ITobeI Visualizza il messaggio
    Questi due pannelli si scambiano tra loro tramite un animazione nella quale il pannello che si visualizza se ne "esce dalla JFrame" mentre sotto sta già l' altro pannello in maniera tale che si abbia una specie di effetto a libro. Quindi una volta deve stare un pannello sotto e una volta l' altro perciò mi serve un modo.
    Ah ok, mi ricordo che avevi già chiesto qualcosa per una animazione a "libro". Allora CardLayout è da escludere, visualizza sempre e solo 1 tra N componenti. Potresti provare JLayeredPane, dove i componenti possono stare effettivamente su livelli differenti. C'è solo un piccolo disagio: Il JLayeredPane lo puoi certamente mettere in CENTER (BorderLayout) nel content pane, così occupa tutto lo spazio possibile nel frame. Ma i componenti che metti nel JLayeredPane li devi posizionare e dimensionare tu esplicitamente. Se il frame è ridimensionabile, ti tocca un pochino di lavoro per adattare i tuoi pannelli.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    18
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ah ok, mi ricordo che avevi già chiesto qualcosa per una animazione a "libro". Allora CardLayout è da escludere, visualizza sempre e solo 1 tra N componenti. Potresti provare JLayeredPane, dove i componenti possono stare effettivamente su livelli differenti. C'è solo un piccolo disagio: Il JLayeredPane lo puoi certamente mettere in CENTER (BorderLayout) nel content pane, così occupa tutto lo spazio possibile nel frame. Ma i componenti che metti nel JLayeredPane li devi posizionare e dimensionare tu esplicitamente. Se il frame è ridimensionabile, ti tocca un pochino di lavoro per adattare i tuoi pannelli.

    Grazie mille, il JLayeredPane è perfetto, lo proverò. Si ho fatto già un post per l' animazione in 3d dei pannelli Comunque ho trovato una libreria per il 3d, com.sun.j3d, si può integrare con swing però non è possibile far diventare pannelli in 3d xD.

Tag per questa discussione

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.