JavaFX:如何默认设置 TiteledPane selected/opened

JavaFX: How to set a TiteledPane selected/opened by default

我正在使用 java 和 javaFX 进行一个项目,我需要知道是否有办法获得第一个 TiteledPaneAccordion默认打开..

我的意思是当舞台 加载 时,第一个 TiteledPane 被选中并且其内容显示 没有任何用户干预 .我尝试了所有建议的方法,但没有一个看起来像我想要的。正如我所见,官方文档中或本网站或其他网站中没有描述任何类似的内容。


另外:

这是我的方法:(代码 java 和 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>

这里是个例外:

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.access00(Unknown Source)
at javafx.scene.Scene$MouseHandler.process(Unknown Source)
at javafx.scene.Scene$MouseHandler.access00(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$handleMouseEvent0(Unknown Source)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda5/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$null5(Unknown Source)
at com.sun.glass.ui.win.WinApplication$$Lambda/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

这是我所依赖的文档中的文本。

public final void setExpandedPane(TitledPane value)

The expanded TitledPane that is currently visible. While it is technically possible to set the expanded pane to a value that is not in getPanes(), doing so will be treated by the skin as if expandedPane is null. If a pane is set as the expanded pane, and is subsequently removed from getPanes(), then expanded pane will be set to null, if possible. (This will not be possible if you have manually bound the expanded pane to some value, for example).

如果有任何不清楚的地方,请发表评论。任何建议都会有所帮助..谢谢

关于代码困难,强烈建议每次工作时刷新项目,然后从 javaFX 场景生成器保存 FXML 文件,因为 eclipse 不会自动执行此操作。

如果您还有一些代码问题,此示例已验证:

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

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

关于您在评论中提到的云问题,据我所知 将工作区放在 google 驱动器 folder.May 中 没有什么坏处如果你每次完成一章代码都做备份会更好,因为有时当他试图加载另一个程序已经使用的文件时驱动器崩溃。

对于那些想要在 FXML 而不是代码中包含默认展开窗格的用户:

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