JavaFX - Accordion(衔接TitledPane)

 Accordion是与TitledPane一起使用,Accordion会将ttp组合起来如下图:,一个展开会将其余的缩进。还可以设置监听事件,监听打开的ttp。

下图ttp2设置了将展开按钮在右边。

package sample;


import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.NodeOrientation;
import javafx.scene.Scene;
import javafx.scene.control.Accordion;
import javafx.scene.control.Button;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;


public class Main extends Application {


    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {


        AnchorPane ap = new AnchorPane();
        Accordion acc = new Accordion();
        ap.setStyle("-fx-background-color: darkkhaki");

        TitledPane ttp1 = new TitledPane("TitledPane1", new Button("无动画折叠"));//点击收缩
        ttp1.setExpanded(false);//默认不展开,点击之后展开
        ttp1.setAnimated(false);//设置展开没有动画,默认有


        TitledPane ttp2 = new TitledPane();//点击收缩
        ttp2.setText("TTP2");
        ttp2.setContent(new Button("TTP2"));
        ttp2.setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT);//把ttp2的显示的箭头改到右边,默认在左边



        TitledPane ttp3 = new TitledPane();//点击收缩
        ttp3.setText("TTP3");
        HBox hBox = new HBox();
        hBox.setStyle("-fx-background-color: darkslateblue");
        hBox.getChildren().addAll(new Button("b3333"), new Button("b44444"), new Button("b5555"));
        ttp3.setContent(hBox);

        
        acc.getPanes().addAll(ttp1,ttp2,ttp3);//每次只能展开一个
        ap.getChildren().addAll(acc);
        acc.expandedPaneProperty().addListener(new ChangeListener<TitledPane>() {//全部缩起来的时候会报空指针异常,得加上if
            @Override
            public void changed(ObservableValue<? extends TitledPane> observable, TitledPane oldValue, TitledPane newValue) {
               if(newValue == null){
                   System.out.println(oldValue.getText()+"折叠");
                   return;
               }
                System.out.println("看看是谁展开了"+newValue.getText());
            }
        });

        Scene scene = new Scene(ap);


        primaryStage.setScene(scene);
        primaryStage.setTitle("Java FX  ");
        primaryStage.setWidth(800);
        primaryStage.setHeight(800);
        primaryStage.show();


    }


}

 

### 如何管理和使用JavaFX的`javafx-controls`和`javafx-fml`模块 #### 使用命令行管理JavaFX模块 为了正确运行包含`javafx.controls`和`javafx.fxml`模块的应用程序,可以在命令行中通过指定`--module-path`以及`--add-modules`参数来引入所需的JavaFX模块。例如: ```bash java --module-path "." --add-modules javafx.controls,javafx.fxml -jar YourApplication.jar ``` 此方法适用于已经打包好的应用程序,并且需要确保`.jar`文件位于当前工作目录下[^1]。 #### 配置开发环境中的JavaFX模块依赖 对于集成开发环境中(IDE)如Eclipse或IntelliJ IDEA,在项目设置里添加对JavaFX SDK的支持是必要的操作之一。具体来说就是安装JavaFX SDK并配置好相应的库路径,使得编译器能够识别到`javafx.controls`与`javafx.fxml`这两个核心组件[^2]。 另外一种方案是在构建工具(比如Maven或者Gradle)中声明对外部资源——即JavaFX JAR包的位置引用,从而实现自动化处理外部依赖项的目的。这种方式特别适合于团队协作开发场景下的版本控制需求[^3]。 #### 解决潜在冲突问题 当遇到由于不同模块间访问权限不足而引发错误的情况时(如尝试加载第三方控件库时发生的非法访问异常),可以考虑调整应用所使用的JavaFX版本或是修改项目的模块化定义文件(`module-info.java`)以开放特定内部API给其他自定义模块读取[^4]。 ```java // Example of a module-info.java file that opens up certain packages from the JavaFX graphics module. open module your.application.module { requires javafx.controls; requires javafx.fxml; exports your.package.to.export; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值