IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JavaFX学习笔记 -> 正文阅读

[Java知识库]JavaFX学习笔记

基本结构

JavaFX程序基本结构:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;

public class MyJavaFX extends Application {
    @Override // Override the start method in the Application class
    public void start (Stage primaryStage){
        // Create a scene and place a butten in the scene
        Button btOK = new Button("OK");
        Scene scene = new Scene(btOK,200,200);
        primaryStage.setTitle("MyJavaFX");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    /**
     * The main method is only needed for the IDE with limites
     * JavaFX support. Not needed for running from the command line.
     *
     * 这个主方法在不完全支持JavaFX的IDE中使用,命令行运行可以不写主方法
     * 不写main的话,JVM自动调用launch方法来运行程序
     */
    public static void main(String[] args) {
        Application.launch(args);
    }
}

运行结果:

代码说明:

? ? ? ? ?创建的主类需要继承抽象类 javafx.application.Application 来定义编写 JavaFX 程序。主类重写了 javafx.application.Application类中的start方法。当一个JavaFX程序启动的时候,JVM会使用它的默认构造方法来创建类的一个实例,同时调用它的start方法。start方法一般用于将UI组件放入一个场景(Sence),并且在舞台(Stage)中显示该场景。

Button btOK = new Button("OK");
Scene scene = new Scene(btOK,200,200);

创建了一个按钮并把它放到scene场景中。一个Sence对象可以使用构造方法Scene(node,width,height)创建?。这个构造方法指定了场景的宽度和高度并且将节点置于一个场景中。

public void start (Stage primaryStage){ ... }

一个Stage对象是一个窗体。当应用程序启动的时候,一个主舞台对象由JVM自动创建。JavaFX应用剧院的类比来命名Stage和Scene类。可以认为舞台是一个支持场景的平台,节点如同在场景中演出的演员。

    Stage stage = new Stage(); 
    stage.setTitle("Second Stage"); 
    stage.setScene(new Scene(new Button("New Stage"), 100, 100));        
    stage.show(); // Display the stage

    stage.setResizable(false); // 固定窗口大小

可以通过创建一个新的Stage实例来创建另外一个窗口。默认情况下,用户可以改变窗口大小,如果不让用户更改的话可以使用stage.setResizable(false)。

?面板、UI组件以及形状

面板、UI组件和形状是Node的子类型

和其他UI框架类似JavaFX也提供了面板(Pane)功能,一般是用来充当容器类,来整体方便布局设计。将各个节点放到一个面板中,然后将面板再置于一个场景中。

  • 节点(Node)是可视化组件,比如一个形状、一个图像视图、一个UI组件或者一个面板。
  • 形状是指文字、直线、圆、椭圆、矩形、弧、多边形、折线等。
  • UI 组件是指标签、按钮、复选框、 单选按钮、文本域、文本输入区域等。

?

请注意,Scene 可以包含 Control 或者 Pane, 但是不能包含 Shape 和 ImageView。Pane 可以包含 Node 的任何子类型。可以使用构造方法 Scene(Parent, width, height)或者 Scene(Parent)创建 Scene。后一个构造方法中场景的尺寸将自动确定。Node 的每个子类都 有一个无参的构造方法,用于创建一个默认的节点。

public void start(Stage primaryStage) {
    // Create a scene and place a button in the scene
    StackPane pane = new StackPane();
    pane.getChildren().add(new Button("OK"));    
    Scene scene = new Scene(pane, 200, 50);
    primaryStage.setTitle("Button in a pane"); // Set the stage title
    primaryStage.setScene(scene); // Place the scene in the stage
    primaryStage.show(); // Display the stage
  }

? ??程序创建一个 StackPane,然后将一个按钮作为面板的组成部分(child)加入。getChildren()方法返回 javafx.collections.ObservableList 的一个实例。 ObservableList 类似于 ArrayList, 用于存储一个元素集合。调用 add(e)将一个元素加人列表。StackPane 将节点置于面板中央,并且置于其他节点之上。这里只有一个节点在面板中。StackPane会得到一个节点的偏好尺寸。所以我们看到按钮以它的偏好尺寸显示。

?

 public void start(Stage primaryStage) {
    // Create a circle and set its properties
    Circle circle = new Circle();
    circle.setCenterX(100);
    circle.setCenterY(100);
    circle.setRadius(50);
    circle.setStroke(Color.BLACK);  // 笔画颜色
    circle.setFill(Color.BROWN);           // 填充颜色 采用无色
    
    // Create a pane to hold the circle 
    Pane pane = new Pane();
    pane.getChildren().add(circle);
    
    // Create a scene and place it in the stage
    Scene scene = new Scene(pane, 200, 200);
    primaryStage.setTitle("ShowCircle"); // Set the stage title
    primaryStage.setScene(scene); // Place the scene in the stage
    primaryStage.show(); // Display the stage
  }

程序创建了一个 Circle 并将它的圆心设置在( 100, 100 ) , 同时这里也是场景的中央,因为创建场景时给出的宽度和高度都是 200。圆的半径设为50。请注意,Java 图形的尺寸单位都使用像素

笔划颜色(即画圆所采用的颜色)设置为黑色。

填充颜色(即用于填充圆的 颜色)设置为棕色。可以将颜色设置为 null 表明采用无色。

?

程序创建了一个 Pane并将圆置于面板中。请注意,在 Java 的坐标系中,面板左上角的坐标是(0,0),这不同于传统坐标系中( 0, 0 ) 位于窗体的中央。在 Java 坐标系中,x坐标从左到右递增, y坐标从上到下 递增

?

面板置于场景中,然后场景设置于舞台中。圆显示在舞台中央。然而,如果改变窗体的大小,圆不再居中。

当窗体改变大小的时候为了依然显示圆居中,圆心的 x 和y?坐标需要重新设置在面板的中央。可以通过设置属性绑定来达到效果。

属性绑定

可以将一个目标对象绑定到源对象中。源对象的修改将自动反映到目标对象中。

  @Override // Override the start method in the Application class
  public void start(Stage primaryStage) {    
    // Create a pane to hold the circle 
    Pane pane = new Pane();
    
    // Create a circle and set its properties
    Circle circle = new Circle();
    circle.centerXProperty().bind(pane.widthProperty().divide(2));
    circle.centerYProperty().bind(pane.heightProperty().divide(2));
    circle.setRadius(50);
    circle.setStroke(Color.BLACK); 
    circle.setFill(Color.WHITE);
    pane.getChildren().add(circle); // Add circle to the pane

    // Create a scene and place it in the stage
    Scene scene = new Scene(pane, 200, 200);
    primaryStage.setTitle("ShowCircleCentered"); // Set the stage title
    primaryStage.setScene(scene); // Place the scene in the stage
    primaryStage.show(); // Display the stage
  }

?

如同许多 JavaFX 类中的属 性一样,在属性绑定中,该属性既可以作为目标,也可以作为源。目标监听源中的变化,一旦源中发生变化,目标将自动更新自身。一个目标采用 bind 方法和源进行绑定:

target.bind(source);

如果目标和源同时都是绑定属性和可观察属性,它们就可以使用 bindBidirectional 方法进行双向绑定:

    public static void main(String[] args) {
        DoubleProperty d1 =new SimpleDoubleProperty(1);
        DoubleProperty d2 =new SimpleDoubleProperty(2);
        // 双向绑定
        d1.bindBidirectional(d2); // 这里设置完属性后,后边就不可以在设置成其他绑定了!
        System.out.println("d1 is " + d1.getValue() +
                " and d2 is "+ d2.getValue());
        d2.setValue(70.2); // 单向绑定,d1的值随d2的值改变而改变,并且不能设置d1的值
        System.out.println("d1 is " + d1.getValue() +
                " and d2 is "+ d2.getValue());
        d1.setValue(5);
        System.out.println("d1 is " + d1.getValue() +
                " and d2 is "+ d2.getValue());
    }

?

节点的通用属性和方法

有很多先介绍两个:style 和 rotate

style属性

样式属性使用前缀 - fx- 进行定义,每个节点拥有它自己的样式属性。设定样式的语法是 styleName:value

circle.setStyle("-fx-stroke:black; -fx-fill:red;");
// 设置了一个圆的两个 JavaFX CSS 属性。该语句等价于下面两个语句:
circle.setStroke(Color.BLACK):
circle.setFill(Color.RED);

如果使用了一个不正确的 JavaFX CSS, 程序依然可以编译和运行,但是样式将被忽略。

rotate属性

rotate属性可以设定一个以度为单位的角度,让节点围绕它的中心旋转该角度。如果设置 的角度是正的,表示旋转是顺时针;否则,逆时针。

//将一个按钮旋转 80°
button.setRotate(80):
 @Override // Override the start method in the Application class
  public void start(Stage primaryStage) {
    // Create a scene and place a button in the scene
    StackPane pane = new StackPane();
    Button btOK = new Button("OK");
    btOK.setStyle("-fx-border-color: blue;");
    pane.getChildren().add(btOK);    
    
    pane.setRotate(45);
    pane.setStyle(
      "-fx-border-color: red; -fx-background-color: lightgray;");
    
    Scene scene = new Scene(pane, 200, 250);
    primaryStage.setTitle("NodeStyleRotateDemo"); // Set the stage title
    primaryStage.setScene(scene); // Place the scene in the stage
    primaryStage.show(); // Display the stage
  }

?

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-07 13:35:18  更:2022-02-07 13:37:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:07:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码