我一直在创建一些具有多个窗格的GUI,用户需要能够在这些窗格之间切换。因此,我一直在寻找能让我处理这个问题的内置控件。我认为两个明显的选择是TabPane和手风琴。我也遇到了分页控制。
我的第一个问题:在文档中,分页控件通常被描述为一种浏览分成较小部分的内容的方式。我使用它的方式更像是简单地将(有些不相关的)内容的窗格分隔到不同的页面上,就像使用TabPane一样。为此目的使用分页控件有什么问题吗?并且有任何利弊VS这种方法和TabPane吗?
通过设置页面工厂,我已通过Pagination控件实现了它,如下所示:
this.setPageCount(2);
this.setPageFactory((Integer index) -> {
if (index == 0) {
return myFirstPane;
} else {
return mySecondPane;
}
});
其中有两个页面,每个页面都有自己的窗格要显示。在这种情况下,这个'代表一个扩展分页的课程。
我的第二个问题:自定义分页控件的范围有多大,例如:而不是为页面显示1,2,3等,我可以为每个页面选择自定义消息,例如"第一个窗格","第二个窗格"等?
另外,有没有办法以不同的方式定位分页控件,因为默认情况下它看起来位于我与之关联的窗格下方,但如果我希望它出现在顶部呢?
答案 0 :(得分:0)
Pagination控件不是为了满足您的特定需求而定制的,因此您最好创建自己的组件。一个快速而肮脏的导航组件可以满足您的需求:
package sample;
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage stage) throws Exception {
// Define the different panes
StackPane pane1 = new StackPane(new Label("Pane 1"));
StackPane pane2 = new StackPane(new Label("Pane 2"));
// This is the control that holds the active pane and the navigation
BorderPane root = new BorderPane();
// Create buttons to select active pane
Button button1 = new Button("Pane 1");
button1.setOnAction(e -> root.setCenter(pane1));
button1.disableProperty().bind(Bindings.createBooleanBinding(() -> root.getCenter() == pane1, root.centerProperty()));
Button button2 = new Button("Pane 2");
button2.setOnAction(e -> root.setCenter(pane2));
button2.disableProperty().bind(Bindings.createBooleanBinding(() -> root.getCenter() == pane2, root.centerProperty()));
// Add navigation to the bottom
HBox menu = new HBox(button1, button2);
menu.setAlignment(Pos.CENTER);
root.setBottom(menu);
// Enable pane1 by default
root.setCenter(pane1);
stage.setScene(new Scene(root, 400, 300));
stage.show();
}
}
希望这有帮助:)