javafx 笔记

本文详细介绍了JavaFX中的Control使用,包括TextField提示语、FlowPane、MVC模式下查找FXML组件、ChoiceBox和StackPane的运用。同时,讲解了CSS样式的应用,如设置字体、透明度和圆角。此外,还讨论了布局管理器GridPane,子节点查找方法以及如何设置渐变过渡效果。

一、Control

        1、textfield 添加提示语,用promptText属性;

                如:promptText="输入提示语"

        2、FlowPane

                链接:JavaFX 类 FlowPane用法及代码示例 - 纯净天空 (vimsky.com)

        3、javafx-MVC模式下,如何找到fxml组件中的控件

                 Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
                 TextArea ta= (TextArea) root.lookup("#ta");//#ta是textarea的id号

               lookup是node类中的一个方法。该方法子类的id遍历node的所有子类,如果有则返回该子类,否则返回null

        4、choiceBox 使用:

        5、stackPane使用

        stackPane 以堆栈的形式布置其子级,子元素默认是居中放置。最后放置的节点在最上面显示,最先放入的组件在最下面。

        在使用的过程中发现其子节点是透明的。我花费了很大的精力去解决这个问题,但是没有一个很好的解决方案。后来找到以下几种处理方式:

                  5.1、调用Node.toFront()方法将要显示的组件放置在最上层;这个方法可能会引起程序性能下降, 这个我没有测过;

        引用链接:JavaFX Tip 14: StackPane Children – Hidden But Not Gone (javacodegeeks.com)
JavaFX Tip 14: StackPane Children – Hidden But Not Gone (javacodegeeks.com)
https://www.javacodegeeks.com/2014/08/javafx-tip-14-stackpane-children-hidden-but-not-gone.html
                5.2、通过将其子节点的opacityProperty属性值设置为0完全透明。

        node.opacityProperty().setValue(0);

        注:0完全透明,1是完全不透明。

        组件的切换方法:

// 隐藏
KeyFrame key = new KeyFrame(Duration.millis(500),new KeyValue(tPane.opacityProperty(), 0));

// 显示
KeyFrame key = new KeyFrame(Duration.millis(500),new KeyValue(tPane.opacityProperty(), 1));

        这个方法带来了另一个问题,重新显示的组件的子组件是不能编辑的。从表面上看是将上层的组件隐藏了,实际是只是将上层的组件变成完全透明的了,上层还在原先的位置,并没有被移走。这就造成了下面的组件不可编辑的错觉。

               5.3、使用动画

             这个方法分为两步:将上层组件设置为完全透明,将上层组件移走;

                (1)、将上层组件设为完全透明

FadeTransition fadeTransition = new FadeTransition(Duration.millis(1500), tPane);
fadeTransition.setFromValue(1.0f);
fadeTransition.setToValue(0.0f);
fadeTransition.setCycleCount(1);
fadeTransition.setAutoReverse(true);
fadeTransition.play();

解释:

Duration.millis(1500)  动画持续的时长,本例中是1500毫秒
setFromValue(1.0f)    开始的透明度;
setToValue(0.0f)         结束的透明度;     结合上一行,本例是从完全不透明过渡到完全透明;
setCycleCount(1)       持续的次数;        本例是一次;
setAutoReverse(true) 动画效果是否润滑;
play();                         不能缺少。是动画开始播

                (2)、移走上层组件

TranslateTransition translateTransition = new TranslateTransition(Duration.millis(1500), tPane);
translateTransition.setFromX(0);
translateTransition.setToX(1200);
translateTransition.setCycleCount(1);
translateTransition.setAutoReverse(true);
translateTransition.setInterpolator(Interpolator.LINEAR);
translateTransition.play();
 

二、CSS样式

        在单独一个类中引入css文件:

        Java Code:

                // css 的路径

                String css = class().getResource(css的路径).toExternalForm();

                node.getStyleClass().add(css);

        Fxml: 

                <stylesheets>
                        <URL value="@css的路径" /><!--@不可少-->
                </stylesheets>

        在程序加载的时候引入需要用stage加载文件。如:  stage.getScene().getStylesheets().addAll(getClass().getResource("/style/example.css").toString());addAll可以引入多个css文件。

        要使用外部css文件,组件要设置id,否则不起作用。

        1、鼠标悬停: 用hover伪类;

        2、字体:

                设置颜色:-fx-text-fill; 属性可以是rgb格式也可以是Color类

                        如下面两行都可以将将字体设置为红色。

                        -fx-text-fill: rgb(255,0,0) ; // rgb

                        -fx-text-fill: Color.red; // Color

                设置字号: -fx-font-size;

                        如下面一行将字体大小设置为15个像素

                        -fx-font-size: 15px;

        3、透明度

                -fx-opacity: 设置一个元素的透明度。该元素及其子元素具有相同的透明度。

                取值:1、0-1:1完全不透明;0完全透明;

                           2、inherit:应该从父元素继承opacity的值;

        4、圆角:

                -fx-background-radius: 25;

                -fx-border-radius: 25;

三、Layout

        1、GridPane

                GridPane grid = new GridPane();

                显示网格线:grid.setGridLinesVisible(true); 默认是false,不显示;

                设列的宽度:

                ColumnConstraints cc = new ColumnConstraints();

                cc.setPercentWidth(50); //该列将宽度设置为50%宽;

                如有多列,则可以声明多列并设置相应的宽度。只设置一列宽度,只对第一列起作用,其他列不起作用。 

四、查找子节点

        一般我们在某个节点下查找一个特定的节点的做法:首先用getChildren将该节点下的所有子节点拿到,然后去遍历匹配。该方法的优点是我们只需要知道某些属性就行,比如text、id等;javafx给我们提供了另一种方法,就是lookup方法。

lookup方法是parent类的方法,也就是只要是继承了parent类的类都有这个方法。使用这个方法也很简单,只要知道要查找的子节点的id就可以了。如果能查找到会返回一个node,否则会返回null;

如:Node node= flowPane.lookup("#"+id);

参数中的“#”是必不可少的,否则会得到一个null;

五、设置渐变过渡效果

        以矩形为例:

        Stop[] stops = new Stop[] {
                new Stop(0, Color.GAINSBORO),
                new Stop(0.5, Color.DIMGRAY),
                new Stop(1, Color.GAINSBORO)
        };
        Rectangle rectangle = new Rectangle(0, 12, 800, 3);
        LinearGradient linearGradient = new LinearGradient(0,0,1,0,true,CycleMethod.REPEAT,  stops);
        rectangle.setFill(linearGradient);

说明:停止类Stop是javafx的一部分。包含偏移量和颜色。定义要在渐变上使用渐变色的一个元素。停止类继承对象类。

构造函数:

Stop(double offset, Color c):使用指定的偏移量各颜色创建一个新的Stop对象;

offset取值范围是0~1。1是100%;

常用方法:

方法说明
equals(Object o)返回两个Stop对象是否相等。
getColor()返回此偏移处的颜色渐变。
getOffset()返回止损的偏移量。
hashCode()返回Stop对象的哈希码。

 该例Stop数组有3个stop类。偏移量设置为0-->0.5-->1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值