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

被折叠的 条评论
为什么被折叠?



