JavaFX - 手风琴



手风琴充当一个或多个标题面板的容器。这些标题面板是带有标题的面板,可以通过点击其标题来展开或折叠。但是,一次只允许打开一个标题面板。手风琴可用于将UI组织成可以根据需要隐藏或显示的部分。

下图显示了一个手风琴:

Sample Accordion

JavaFX 中的手风琴

在 JavaFX 中,手风琴由名为Accordion的类表示。此类属于javafx.scene.control包。通过实例化此类,我们可以在 JavaFX 中创建手风琴节点。

此类有两个构造函数,如下所示:

  • Accordion() - 用于创建不带TitledPane的手风琴。

  • Accordion(...TitledPanes) - 它将使用指定的TitledPane创建一个手风琴。

在 JavaFX 中创建手风琴的步骤

请按照以下步骤在 JavaFX 中创建手风琴。

步骤 1:创建两个或多个 TitledPane

我们可以通过实例化名为TitledPane的类(属于javafx.scene.control包)在 JavaFX 中创建标题面板。如下所示实例化此类:

//Creating a TitledPane object         
TitledPane paneOne = new TitledPane();

同样,创建所需数量的标题面板。

步骤 2:设置 TitledPane 的标题和内容

分别使用setText()setContent()方法指定标题面板的标题和内容,如下面的代码块所示。

paneOne.setText("Your Name");
paneOne.setContent(new Label("My name is: \n Ansh")); 

请记住,我们可以根据我们的需求使用 JavaFX 的不同 UI 节点自定义 TitledPane 的内容。

步骤 3:实例化 Accordion 类

实例化javafx.scene.control包中的Accordion类,无需向其构造函数传递任何参数值,并使用以下代码块添加所有TitledPane:

Accordion accordionNew = new Accordion();
accordionNew.getPanes().addAll(paneOne, paneTwo, paneThree);

步骤 4:启动应用程序

创建手风琴后,请按照以下步骤正确启动应用程序:

  • 首先,通过将 Accordion 对象作为参数值传递给其构造函数来实例化名为VBox的类。

  • 然后,通过将 VBox 对象作为参数值传递给其构造函数来实例化名为Scene的类。我们还可以将应用程序屏幕的尺寸作为可选参数传递给此构造函数。

  • 然后,使用Stage类的setTitle()方法设置舞台的标题。

  • 现在,使用名为Stage的类的setScene()方法将 Scene 对象添加到舞台。

  • 使用名为show()的方法显示场景的内容。

  • 最后,使用launch()方法启动应用程序。

示例

以下是使用 JavaFX 创建手风琴的程序。将此代码保存在名为JavafxAccordion.java的文件中。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Accordion;
import javafx.scene.control.TitledPane;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class JavafxAccordion extends Application {
   @Override
   public void start(Stage stage) {
      //Creating the first TitledPane
      TitledPane paneOne = new TitledPane();
      paneOne.setText("Your Name");
      paneOne.setContent(new Label("My name is: \n Ansh"));
      //Creating the second TitledPane
      TitledPane paneTwo = new TitledPane();
      paneTwo.setText("Your Address");
      paneTwo.setContent(new Label("My address is: \n Hyderabad \n Telangana"));
      //Creating the third TitledPane
      TitledPane paneThree = new TitledPane();
      paneThree.setText("Your Job");
      paneThree.setContent(new Label("My job role is: \n Content Engineer"));
      //Creating an Accordion for all TitledPane
      Accordion accordionNew = new Accordion();
      accordionNew.getPanes().addAll(paneOne, paneTwo, paneThree);
      accordionNew.setExpandedPane(paneOne);
      VBox root = new VBox(accordionNew);
      //Setting the stage
      Scene scene = new Scene(root, 500, 500, Color.BEIGE);
      stage.setTitle("Accordion in JavaFX");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}   

使用以下命令从命令提示符编译并执行保存的 Java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls JavafxAccordion.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls JavafxAccordion

输出

执行上述程序后,将生成一个 JavaFX 窗口,显示如下所示的手风琴。

Accordion Output

使用其参数化构造函数在 JavaFX 中创建手风琴

如前所述,在 JavaFX 中创建手风琴有两种方法:一种使用 Accordion 类的默认构造函数,另一种使用其参数化构造函数。在下一个示例中,我们将使用 Accordion 类的参数化构造函数在 JavaFX 中创建手风琴。将此 Java 代码保存在名为JavafxAccordion.java的文件中。

示例

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Accordion;
import javafx.scene.control.TitledPane;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class JavafxAccordion extends Application {
   @Override
   public void start(Stage stage) {
      //Creating the first TitledPane
      TitledPane paneOne = new TitledPane();
      paneOne.setText("Your Name");
      paneOne.setContent(new Label("My name is: \n Ansh"));
      //Creating the second TitledPane
      TitledPane paneTwo = new TitledPane();
      paneTwo.setText("Your Address");
      paneTwo.setContent(new Label("My address is: \n Hyderabad \n Telangana"));
      //Creating the third TitledPane
      TitledPane paneThree = new TitledPane();
      paneThree.setText("Your Job");
      paneThree.setContent(new Label("My job role is: \n Content Engineer"));
      //Creating an Accordion for all TitledPane
      Accordion accordionNew = new Accordion(paneOne, paneTwo, paneThree);
      accordionNew.setExpandedPane(paneThree);
      VBox root = new VBox(accordionNew);
      //Setting the stage
      Scene scene = new Scene(root, 500, 500, Color.BEIGE);
      stage.setTitle("Accordion in JavaFX");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}  

使用以下命令从命令提示符编译并执行保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls JavafxAccordion.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls JavafxAccordion

输出

执行上述代码时,将生成以下输出。

Accordion Output2
广告