È un po 'difficile fare bene con l'attuale API JavaFX 2.2.
Ecco alcune opzioni.
Utilizzare un MenuButton con un set grafico nella sua MenuItem
Questo è l'approccio adottato in s Button with popup showed below' eseguibile sample code.
Utilizzare un PopupControl
Date un'occhiata a come il ColorPicker fa questo nella sua code.
ColorPicker estende PopupControl. È possibile farlo, ma non tutte le API necessarie per creare il proprio PopupControl sono attualmente pubbliche. Quindi, per JavaFX 2.2, dovresti fare affidamento su classi com.sun interne che sono deprecate e saranno sostituite da classi pubbliche javafx.scene.control in JDK8.
Utilizzare un ContextMenu
Quindi, penso che la tua idea di "usare un ContextMenu e aggiungere un riquadro per un MenuItem" è probabilmente l'approccio migliore per ora. Dovresti essere in grado di farlo utilizzando uno CustomMenuItem o setting a graphic su un normale MenuItem
. Il ContextMenu
ha un bel relative positioning logic. Un ContextMenu
può anche essere attivato da un MenuButton.
Utilizzare una finestra personalizzata
A tale scopo, visualizzare un palco trasparente, in una posizione relativa al nodo.
C'è un codice di esempio per iniziare che ho temporaneamente collegato here. Il codice di esempio esegue il posizionamento relativo ai lati della finestra principale, ma è possibile aggiornarlo per eseguire il posizionamento relativo ai lati di un determinato nodo (come il metodo show di ContextMenu).
Usare una lastra di vetro
Per fare questo, creare uno StackPane come radice della finestra principale. Posiziona il riquadro del contenuto principale come primo nodo nello StackPane e quindi crea un gruppo come secondo nodo nello stack, in modo che si sovrapponga alla parte superiore del contenuto principale. Normalmente, il gruppo principale non contiene nulla, ma quando vuoi mostrare il tuo popup, posizionalo nel gruppo in alto e traducilo in una posizione relativa al nodo appropriato nel tuo contenuto principale.
Si può vedere come i nodi di ancoraggio in this demo vengono utilizzati per vedere come questo potrebbe essere adattabile al contesto.
C'è un aggiornamento rilevante per questo per JavaFX8?
Non c'è molta differenza di pertinenza per Java 8, in generale le opzioni sono descritte in questo post in base alla funzionalità di Java 2.2. Java 8 aggiunge le funzionalità Dialog e Alert, ma quelle sono più mirate all'uso di finestre di dialogo con bordi, titoli e pulsanti piuttosto che il tipo di funzionalità desiderata nella domanda. Forse potresti essere in grado di iniziare dalla classe Dialog e di personalizzarlo molto per ottenere qualcosa di simile a ciò che è necessario, ma probabilmente stai meglio partendo da uno stage vuoto o PopupControl.
Impressionante, buona panoramica, grazie! Sembra che manchi un sacco di cose fino a JavaFX8 ... tale è la vita. – berry120
Puoi dare un esempio per 'Use a ContextMenu'? – TomJ
Mi piacerebbe vedere un esempio con setManged (false) per un componente personalizzato con posizionamento manuale. – T3rm1