Javafx 2 水平JavaFX标题窗格

Javafx 2 水平JavaFX标题窗格,javafx-2,javafx,Javafx 2,Javafx,我想知道JavaFX是否包含一种使手风琴或标题窗格水平的方法。我什么也找不到,但我想我应该问问。基本上,最终目标是拥有一个侧栏,可以展开以显示树视图。以下是我的意向图: 也许JavaFx不提供水平标题窗格,但您可以将标题窗格旋转90度,并将要在其内容中设置的节点旋转270度,就完成了 这是一个代码示例 TitledPane titledPane = new TitledPane(); BorderPane borderPane = new BorderPane(); borderPane.s

我想知道JavaFX是否包含一种使手风琴或标题窗格水平的方法。我什么也找不到,但我想我应该问问。基本上,最终目标是拥有一个侧栏,可以展开以显示树视图。以下是我的意向图:


也许JavaFx不提供水平标题窗格,但您可以将标题窗格旋转90度,并将要在其内容中设置的节点旋转270度,就完成了

这是一个代码示例

TitledPane titledPane = new TitledPane();

BorderPane borderPane = new BorderPane();
borderPane.setCenter(new Label("My Label")); //Or your tree view

borderPane.setRotate(270);

titledPane .setContent(borderPane);

JavaFX2.2中没有标准的水平方向标题窗格

您可以在中为其中一个创建功能请求

实现自己的水平标题窗格非常简单

下面是一个在标准窗格上使用的动画

Sai的博客文章中有对所涉及技术的进一步解释:

/**为左侧屏幕上和屏幕下的节点设置动画*/
类边栏扩展了VBox{
/**@返回控制按钮以隐藏和显示侧边栏*/
公共按钮getControlButton(){return controlButton;}
专用最终按钮控制按钮;
/**创建包含给定节点垂直对齐的侧栏*/
侧栏(最终双扩展宽度,节点…节点){
getStyleClass().add(“侧栏”);
此.setPrefWidth(expandedWidth);
//创建要隐藏和显示的栏。
设置对齐(位置中心);
getChildren().addAll(节点);
//创建一个按钮来隐藏和显示侧边栏。
controlButton=新按钮(“折叠”);
controlButton.getStyleClass().add(“隐藏左侧”);
//按下按钮时应用动画。
controlButton.setOnAction(新的EventHandler(){
@重写公共无效句柄(ActionEvent ActionEvent){
//创建动画以隐藏侧栏。
最终动画hideSidebar=新过渡(){
{setCycleDuration(Duration.millis(250));}
受保护的孔隙插值(双重压裂){
最终双倍宽度=扩展宽度*(1.0-分形);
setPrefWidth(curWidth);
setTranslateX(-expandedWidth+curWidth);
}
};
hideSidebar.onFinishedProperty().set(新的EventHandler()){
@重写公共无效句柄(ActionEvent ActionEvent){
setVisible(假);
controlButton.setText(“显示”);
controlButton.getStyleClass().remove(“隐藏左侧”);
controlButton.getStyleClass().add(“显示右侧”);
}
});
//创建动画以显示侧栏。
最终动画showSidebar=新过渡(){
{setCycleDuration(Duration.millis(250));}
受保护的孔隙插值(双重压裂){
最终双倍宽度=扩展宽度*分形;
setPrefWidth(curWidth);
setTranslateX(-expandedWidth+curWidth);
}
};
showSidebar.onFinishedProperty().set(新的EventHandler()){
@重写公共无效句柄(ActionEvent ActionEvent){
controlButton.setText(“折叠”);
controlButton.getStyleClass().add(“隐藏左侧”);
controlButton.getStyleClass().remove(“显示右侧”);
}
});
if(showSidebar.statusProperty().get()==Animation.Status.STOPPED&&hideSidebar.statusProperty().get()==Animation.Status.STOPPED){
if(isVisible()){
hideSidebar.play();
}否则{
setVisible(真);
showSidebar.play();
}
}
}
});
}
}

只需在accordion中添加以下行,即可完成操作

 accordion.setRotate(270);
好了:

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

    Label label1 = new Label("label 1");
    label1.setRotate(90);

    TitledPane pane1 = new TitledPane("titled pane 1", label1);
    pane1.setAlignment(Pos.CENTER);

    Label label2 = new Label("label 2");
    label2.setRotate(90);

    TitledPane pane2 = new TitledPane("titled pane 2", label2);
    pane2.setAlignment(Pos.CENTER);

    Accordion accordion = new Accordion();
    accordion.setRotate(270);
    accordion.getPanes().add(pane1);
    accordion.getPanes().add(pane2);

    HBox mainPane = new HBox(accordion);
    accordion.prefWidthProperty().bind(mainPane.heightProperty());
    accordion.prefHeightProperty().bind(mainPane.widthProperty());

    stage.setTitle("Horizontal Accordion");
    stage.setScene(new Scene(mainPane, 800, 600));
    stage.show();
}

我这样做是为了生成我的示例,但在调整大小时会出现问题。我想您可以将窗格的高度/宽度绑定到父窗格的宽度/高度?谢谢,这些资源将非常有用。
@Override
public void start(Stage stage) throws Exception {       

    Label label1 = new Label("label 1");
    label1.setRotate(90);

    TitledPane pane1 = new TitledPane("titled pane 1", label1);
    pane1.setAlignment(Pos.CENTER);

    Label label2 = new Label("label 2");
    label2.setRotate(90);

    TitledPane pane2 = new TitledPane("titled pane 2", label2);
    pane2.setAlignment(Pos.CENTER);

    Accordion accordion = new Accordion();
    accordion.setRotate(270);
    accordion.getPanes().add(pane1);
    accordion.getPanes().add(pane2);

    HBox mainPane = new HBox(accordion);
    accordion.prefWidthProperty().bind(mainPane.heightProperty());
    accordion.prefHeightProperty().bind(mainPane.widthProperty());

    stage.setTitle("Horizontal Accordion");
    stage.setScene(new Scene(mainPane, 800, 600));
    stage.show();
}