Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    29

    [Java] ordine JButton sovrapposti

    Ciao a tutti, sto creando una GUI in Swing dove mi serve avere dei button sovrapposti, il mio problema è che i button devono rimanere sempre allo stesso livello, mentre ora se passo con il mouse su quelli del livello inferiore, di default, me li porta al livello superiore (coprendo quindi gli altri). Esiste un metodo per impostare l'ordine? (Leggendo su internet ho provato modificando lo Z order ma da quello che ho capito non fa al caso mio visto che ho tutto nello stesso JPanel).

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Java ha una sezione apposota del forum.

    Sposto.


    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

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Dai un'occhiata al tutorial: How to Use Layered Panes.


    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

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da tr_gal Visualizza il messaggio
    mi serve avere dei button sovrapposti, il mio problema è che i button devono rimanere sempre allo stesso livello
    Puoi precisare l'obiettivo finale e le motivazioni? Perché dire "sovrapposti" e poi dire "devono rimanere sempre allo stesso livello" è un po' un controsenso.
    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 2014
    Messaggi
    29
    Si volevo essere coincisa ma effettivamente hai ragione Devo fare la tastiera di un piano, e i tasti neri devono ovviamente rimanere in primo piano

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da tr_gal Visualizza il messaggio
    Devo fare la tastiera di un piano, e i tasti neri devono ovviamente rimanere in primo piano
    Ok, chiaro (e sensato)

    Quote Originariamente inviata da tr_gal Visualizza il messaggio
    mentre ora se passo con il mouse su quelli del livello inferiore, di default, me li porta al livello superiore
    Questo succede per via una ottimizzazione sul painting. Tutti i componenti Swing, a partire da JComponent, hanno il metodo:

    public boolean isOptimizedDrawingEnabled()

    Se un componente fa restituire da questo metodo un true, vuole indicare che i suoi componenti contenuti NON si sovrapporranno e questo rende più efficiente il painting. Questo è lo scenario tipico/normale. E tra l'altro quello applicato dai principali layout manager (es. BorderLayout, FlowLayout ecc..) in cui i componenti di fatto non si possono sovrapporre.

    JLayeredPane invece fa restituire false, perché è fatto apposta per stratificare componenti. Se vuoi usare un normale JPanel, puoi usarlo, basta che lo estendi e ridefinisci isOptimizedDrawingEnabled per restituire false. A quel punto non avverrà più il difetto che hai descritto.

    E infine basta solo che ti ricordi che il primo componente aggiunto in un contenitore è quello che sta tecnicamente più sopra (z-order 0) e l'ultimo aggiunto quello più in fondo (z-order N).


    Come alternative:
    1) Appunto un JLayeredPane
    2) Uso del custom painting per disegnare in modo arbitrario la tastiera (con immagini, primitive di disegno, ecc..) e chiaramente con un po' tutto da gestire riguardo eventi ecc... Questa è una soluzione ben più complessa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    29
    Perfetto ora funziona tutto, mi hai chiarito molto le idee, grazie mille!! Proverò anche con il custom painting

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.