JavaFX 如何隐藏Pagination的按钮?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaFX 如何隐藏Pagination的按钮?相关的知识,希望对你有一定的参考价值。

我需要一个类似swing中CardLayout的组件,而TabPane和Pagination都有按钮不符合要求。
或者说,如果自己写一个,那么如何控制显示出来的组件是哪个?(可以加分)
不知道能否at人,@雪飞潇潇

以Pagination的按钮隐藏为例: 首先打开FX的CSS文档,了解Pagination的结构, 找到按钮等所在的子组件,然后让子组件隐藏即可;

FXCSS文档 ; Pagination的结构如下:


Pagination的结构

所以我们隐藏掉pagination-control这个子组件, 就可以隐藏各种按钮,和最底下的文字标签

具体的代码实现:

demo.css文件的源码:

.pagination .pagination-control
visibility: hidden;

java文件的源码:


import javafx.application.Application;

import javafx.scene.*;

import javafx.scene.control.Pagination;

import javafx.scene.layout.BorderPane;

import javafx.scene.text.Text;

import javafx.stage.Stage;

import javafx.util.Callback;


public class PaginationDemo extends Application

public static void main(String[] args)

launch(args);

@Override

public void start(Stage primaryStage) throws Exception

Pagination pageination=new Pagination(10);

//生成页面填充分页组件

pageination.setPageFactory(new Callback<Integer, Node>()

@Override

public Node call(Integer param)

BorderPane pane=new BorderPane();

pane.setCenter(new Text("第"+(param+1)+"页"));

pane.setPrefSize(300,300);

return pane;

);

BorderPane root = new BorderPane();

root.setCenter(pageination);

//方法一: 用CSS的方式隐藏按钮

//优点: 可以不用管该组件目前的状态是否显示

//缺点: 需要一个CSS文件

//pageination.getStylesheets().add(getClass().getResource("demo.css").toExternalForm());

Scene scene = new Scene(root);

primaryStage.setTitle("分页组件");

primaryStage.setScene(scene);

primaryStage.show();

//方法二: 等组件显示出来后,寻找到子组件(按钮),然后设置为隐藏

//优点: 无需css文件

//缺点: 需要先显示组件,然后才能查找到子组件

pageination.lookup(".pagination-control").setVisible(false);




效果图

所以, 建议还是系统的学习下javaFX,比如fxcss (和html的CSS文件比较类似) 以及FXML(结构类似HTML) 稍微阅读下组件的源代码即可

追问

感谢大佬,我之前点的采纳可能没发到度娘那,今天重新看才发现没采纳。。。

追答

不客气~

参考技术A 点击设置进入界面然后点击隐藏,应该就可以看到了追问

请问那个隐藏键在哪?只能隐藏整体组件,没看到隐藏按钮的

参考技术B 这个四个啥软件啊?追问

不知道的话请不要回答,javafx自己搜索

JavaFX:如何制作可点击的文本

我正在寻找一种简单的方法来实现这一目标。我无法在任何地方找到它,我已经尝试过API了。

所以我有一句话:

没有帐户?点击这里

我想把“here”这个词变成蓝色和可点击 - 进入一个按钮。怎么能实现这个?我只是在文本位置后面隐藏一个按钮吗?

答案

使用TextFlowJava 8):

TextFlow flow = new TextFlow(
    new Text("Don't have an account? "), new Hyperlink("Click here")
);

使用FlowPane(Java 7):

FlowPane flow = new FlowPane();
flow.getChildren().addAll(
    new Text("Don't have an account? "), new Hyperlink("Click here")
);

样品

这是一个完整的可执行示例(Java 8):

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.text.*;
import javafx.stage.Modality;
import javafx.stage.*;

public class TextLink extends Application {

    @Override
    public void start(final Stage primaryStage) throws Exception {
        Stage     accountCreation = buildAccountCreationStage(primaryStage);
        Hyperlink createAccount   = buildCreateAccountLink(primaryStage, accountCreation);

        TextFlow flow = new TextFlow(
            new Text("Don't have an account? "), createAccount
        );
        flow.setPadding(new Insets(10));

        primaryStage.setScene(new Scene(new Group(flow)));
        primaryStage.show();
    }

    private Hyperlink buildCreateAccountLink(Stage primaryStage, Stage accountCreation) {
        Hyperlink createAccount = new Hyperlink("Click here");

        createAccount.setOnAction(event -> {
            accountCreation.setX(primaryStage.getX());
            accountCreation.setY(primaryStage.getY() + primaryStage.getHeight());
            accountCreation.show();
        });

        return createAccount;
    }

    private Stage buildAccountCreationStage(Stage primaryStage) {
        Stage accountCreation = new Stage(StageStyle.UTILITY);

        accountCreation.initModality(Modality.WINDOW_MODAL);
        accountCreation.initOwner(primaryStage);
        accountCreation.setTitle("Create Account");
        accountCreation.setScene(new Scene(new Label("<Account Creation Form Goes Here>"), 250, 50));

        return accountCreation;
    }

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

默认链接突出显示有点奇怪,周围有虚线边框(如果你希望你可以用css设置它以获得更好的东西,更类似于网络上的链接;即只是不同颜色的文字来表示访问和未访问的链接)。

在旁边

对于您的特定消息,您应该只是使“没有帐户”文本成为超链接并删除“单击此处”文本(as recommended by the w3c web standards body)。

有关

以上是关于JavaFX 如何隐藏Pagination的按钮?的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaFX 中隐藏表格

JavaFX:如何制作可点击的文本

JavaFX自定义窗口标题栏

隐藏阶段时的JavaFX 8内存泄漏

求助JAVAFX按钮的快捷键怎么实现

JavaFX - 隐藏列后单元格渲染中的错误