2015-10-18 36 views
6

Sto lavorando su un progetto che utilizza Java e JavaFX, ho bisogno di sapere se c'è un modo per avere il primo TiteledPane nel Accordion aperto di default ..JavaFX: Come impostare un TiteledPane selezionato/aperto di default

intendo quando il palco è caricato, il primo TiteledPane è selezionato e il suo contenuto ha mostrato senza l'intervento di qualsiasi utente. Ho provato tutti i metodi suggeriti ma nessuno sembra quello che voglio. Come vedo anche nessuno descritto nella documentazione ufficiale o dato in questo sito o altro è come.


INOLTRE:

qui è il mio approccio: (codice Java e FXML)

@FXML 
private Accordion accord_pane; 
@FXML 
private TitledPane pane_ara,pane_sci,pane_soc,pane_art,pane_spo,pane_fra,pane_ang; 

... 

pane_ara.setText("TitledPane A"); 
pane_sci.setText("TitledPane B"); 

accord_pane.setExpandedPane(pane_ara); 

   <Accordion fx:id="accord_pane" layoutX="20.0" layoutY="100.0" prefHeight="400.0" prefWidth="680.0"> 
        <panes> 
        <TitledPane fx:id="pane_ara" animated="false"> 
         <content> 
          <Pane prefHeight="200.0" prefWidth="200.0"> 
           <children> 
            <ImageView fx:id="img_unit_ara" fitHeight="250.0" fitWidth="650.0" layoutX="15.0" layoutY="15.0" pickOnBounds="true" preserveRatio="true"> 
            <image> 
             <Image url="@temp_5.png" /> 
            </image> 
            </ImageView> 
           </children> 
          </Pane> 
         </content> 
        </TitledPane> 
         <TitledPane fx:id="pane_sci" animated="false"> 
         <content> 
          <Pane prefHeight="200.0" prefWidth="200.0"> 
           <children> 
            <ImageView fx:id="img_unit_sci" fitHeight="190.0" fitWidth="650.0" layoutX="15.0" layoutY="15.0" pickOnBounds="true" preserveRatio="true"> 
            <image> 
             <Image url="@temp_3.png" /> 
            </image> 
            </ImageView> 
           </children> 
          </Pane> 
         </content> 
         </TitledPane> 
        </panes> 
        </Accordion> 

qui è l'eccezione:

javafx.fxml.LoadException: 
/C:/Users/Malek%20Boubakri/Google%20Drive/workspace/Sirat/bin/vue/Enseignant.fxml 
at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source) 
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.load(Unknown Source) 
at vue.Enseignant.start(Enseignant.java:18) 
at vue.Index.stageCtrlHandler(Index.java:85) 
at controleur.MenuCtrl.click_btn(MenuCtrl.java:69) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at sun.reflect.misc.Trampoline.invoke(Unknown Source) 
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at sun.reflect.misc.MethodUtil.invoke(Unknown Source) 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(Unknown Source) 
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(Unknown Source) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) 
at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) 
at javafx.event.Event.fireEvent(Unknown Source) 
at javafx.scene.Scene$ClickGenerator.postProcess(Unknown Source) 
at javafx.scene.Scene$ClickGenerator.access$8100(Unknown Source) 
at javafx.scene.Scene$MouseHandler.process(Unknown Source) 
at javafx.scene.Scene$MouseHandler.access$1500(Unknown Source) 
at javafx.scene.Scene.impl_processMouseEvent(Unknown Source) 
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$350(Unknown Source) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$165/775736639.get(Unknown Source) 
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown Source) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source) 
at com.sun.glass.ui.View.handleMouseEvent(Unknown Source) 
at com.sun.glass.ui.View.notifyMouse(Unknown Source) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$145(Unknown Source) 
at com.sun.glass.ui.win.WinApplication$$Lambda$36/2117255219.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.NullPointerException 
    at controleur.EnsCtrl.initialize(EnsCtrl.java:301) 
    ... 54 more 

questo è il testo della documentazione su cui mi baso.

vuoto setExpandedPane (valore TitledPane) finale pubblica

Il TitledPane espanso che è attualmente visibile. Mentre è tecnicamente possibile impostare il pannello espanso su un valore che non è in getPanes(), così verrà trattato dallo skin come se expandPane è nullo. Se un riquadro è impostato come riquadro espanso ed è successivamente rimosso da getPanes(), viene impostato su null, se possibile . (Questo non sarà possibile se si è associato manualmente il riquadro espanso ad un certo valore, ad esempio).

Se qualche cosa non è chiara per favore basta commentare. Ogni suggerimento sarà helpful..Thanks

+2

"Ho provato tutti i metodi suggeriti". Crea un [MCVE] che mostri ciò che hai provato e [modifica] la tua domanda per includerla. –

+0

Si prega di controllare di nuovo, faccio quello che potevo e ho davvero bisogno di aiuto qui .. grazie –

+1

Il tuo codice sembra corretto. Immagino che tu non abbia letto il link nel mio precedente commento: per favore pubblica un [MCVE]. –

risposta

7

Per le difficoltà di codice E 'altamente raccomandato per aggiornare il vostro progetto ogni volta che si lavora su di salvare un file FXML da JavaFX costruttore scena, perché non lo fate eclissi che automaticamente.

se ancora hve alcuni problemes codice, questo exemple è verificata:

@FXML 
private Accordion accord; 
@FXML 
private TitledPane pane1,pane2; 

//codes in controller.intialize() 
... 
    pane1.setText("TitledPane A"); 
    pane2.setText("TitledPane B"); 
    accord.setExpandedPane(pane1); 

E sul problema nuvola lei ha citato nel commento, come so che c'è nulla di male a mettere l'area di lavoro in google drive folder.Può essere meglio se fai il backup ogni volta che finisci un capitolo di codice, perché a volte guidi crash quando prova a caricare un file già usato da un altro programma.

10

Per coloro che vogliono comprendere il default espansa nel riquadro FXML piuttosto che nel codice:

<Accordion expandedPane="$myPane"> 
    <panes> 
     <TitledPane fx:id="myPane"> 
      ... 
     </TitledPane> 
     <TitledPane> 
      ... 
     </TitledPane> 
    </panes> 
</Accordion> 
+3

Funziona alla grande! Sfortunatamente SceneBuilder non sembra esporre la proprietà "expandedPane" che lo rende difficile da scoprire. – jenglert

+1

il costruttore sovrascrive questo attributo in save :( –