有关JavaFX分页控件的使用和行为的查询

时间:2016-02-27 14:53:40

标签: java javafx tabs pagination

我一直在创建一些具有多个窗格的GUI,用户需要能够在这些窗格之间切换。因此,我一直在寻找能让我处理这个问题的内置控件。我认为两个明显的选择是TabPane和手风琴。我也遇到了分页控制。

我的第一个问题:在文档中,分页控件通常被描述为一种浏览分成较小部分的内容的方式。我使用它的方式更像是简单地将(有些不相关的)内容的窗格分隔到不同的页面上,就像使用TabPane一样。为此目的使用分页控件有什么问题吗?并且有任何利弊VS这种方法和TabPane吗?

通过设置页面工厂,我已通过Pagination控件实现了它,如下所示:

this.setPageCount(2);
this.setPageFactory((Integer index) -> {
            if (index == 0) {
                return myFirstPane;
            } else {
                return mySecondPane;
            }
        });

其中有两个页面,每个页面都有自己的窗格要显示。在这种情况下,这个'代表一个扩展分页的课程。

我的第二个问题:自定义分页控件的范围有多大,例如:而不是为页面显示1,2,3等,我可以为每个页面选择自定义消息,例如"第一个窗格","第二个窗格"等?

另外,有没有办法以不同的方式定位分页控件,因为默认情况下它看起来位于我与之关联的窗格下方,但如果我希望它出现在顶部呢?

1 个答案:

答案 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();
    }

}

希望这有帮助:)