我现在一直在努力让BorderPane地区越过另一个地区......
问题如下:我的应用程序设置在BorderPane根目录中,使用:
正确的区域是问题所在。单击TOP区域中的“通知按钮”时,它应该显示/消失。到现在为止还挺好。问题是该应用程序不使用RIGHT区域,所以我试图让包含AnchorPane的RIGHT区域越过CENTER区域。应用程序的正常状态没有RIGHT区域,我不想在打开通知时调整整个应用程序的大小。试过几件事,比如:
它们都不起作用,因为它们都没有显示,或者调整了我不想要的中心部分。当通知菜单显示时,我希望RIGHT漂浮在CENTER区域之上......有没有办法做到这一点?或者可能是另一个想法触发一个显示在CENTER部分上方的容器?当然,我会在每个CENTER窗格中设计面板并使其可见或不可见,但我的应用程序大约有15个不同的中心窗口,因此在修改方面会非常糟糕......
答案 0 :(得分:1)
我认为您不应该尝试让borderpane为您执行此操作,否则您最终会遇到您不想要的行为,例如当面板可见时调整应用程序的大小时不会调整大小。
请记住,JavaFX确实是3D。你试着将BorderPane包装在AnchorPane,GridPane或ScrollPane中(无论哪个有意义)而不是试图获得正确的插入来做你的事情。例如将ScrollPane(您的滑块)添加到包含的AnchorPane并将其添加到前面并锚定它的顶部,右侧和底部。
这应该会在borderpane上面给你一个右对齐的ScrollPane。
当然,如果你希望它与动画幻灯片一起使用,你可以尝试一下:https://gist.github.com/jewelsea/1437374 或这个: http://blog.physalix.com/javafx2-borderpane-which-slides-in-and-out-on-command/
这是一个非常粗略的例子来展示这个想法:
public class JavaFXApplication2 extends Application {
ScrollPane slider;
AnchorPane root;
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Slide in");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
root.getChildren().add(slider);
AnchorPane.setRightAnchor(slider, 0.);
AnchorPane.setTopAnchor(slider, 0.);
AnchorPane.setBottomAnchor(slider, 0.);
slider.toFront();
}
});
Label l = new Label();
l.setText("Test Label to Show inside content");
Label l2 = new Label();
l2.setText("Peek-a-Boo");
slider = new ScrollPane();
slider.setStyle("-fx-border-color: orangered;");
slider.setContent(l2);
root = new AnchorPane();
root.getChildren().add(btn);
root.getChildren().add(l);
AnchorPane.setRightAnchor(l, 0.);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}