JavaFX场景入门(上)

简介: JavaFX场景入门

JAVAFX



jdk1.8以上引入javafx类库



JDK11+JAVAFX(eclipse)


方式一


方式二


直接引入


避免


另一种编写方式


小知识点


setHgrow或setVgrow、需要精确布局时,应重写layoutChildren()值摆放每一个子节点


setHgrow(hbox,Priority.ALWAYS);


javafx有4中控件来表示多项数据


ListView:列表


TreeView:树


TableView:表格


TreeTableView:多列列表


环境配置


舞台Stage


舞台(场景(布局(控件)))


JavaFX需要继承:javafx.application.AppLication


需要实现方法start


创建main方法 调用launch


需要stage调用show方法


stage.setOpacity(0.9);//设置透明度  0-1


//X,Y监听事件

stage.xProperty().addListener(new ChangeListener<Number>() {
        @Override
        public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
           System.out.println("X窗口现在坐标:"+newValue);
           System.out.println("X窗口之前坐标:"+oldValue);
        }
     });
     stage.yProperty().addListener(new ChangeListener<Number>() {
        @Override
        public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
           System.out.println("Y窗口现在坐标:"+newValue);
           System.out.println("Y窗口之前坐标:"+oldValue);
        }
     });
//创建多个窗口,设置模式
Stage s1 =new Stage();
     //s1.initStyle(StageStyle.TRANSPARENT);//透明的
     s1.initStyle(StageStyle.UNIFIED);
     s1.show();
     Stage s2 =new Stage();
     s2.setTitle("5");
     s2.initStyle(StageStyle.UTILITY);
     //s2.initStyle(StageStyle.UNDECORATED);//白色不带装饰
     s2.show();
// APPLICATION_MODAL设置初始化模态
S2关闭之后才能操作其他窗口
Stage s1 =new Stage();
     s1.setTitle("s1");
     s1.show();
     Stage s2 =new Stage();
     s2.initModality(Modality.APPLICATION_MODAL);
     s2.setTitle("s2");
     s2.show();
// WINDOW_MODAL设置初始化模态
Stage s1 =new Stage();
     s1.setTitle("s1");
     Stage s2 =new Stage();
     //s2.initModality(Modality.APPLICATION_MODAL);
     s2.setTitle("s2");
     //设置s2和s1关联
     s1.initOwner(s2);
     s1.initModality(Modality.WINDOW_MODAL);
     s2.show();
     s1.show();


案例:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.transform.Scale;
import javafx.stage.Stage;
public class javafx03tage extends Application {
    public  static  Stage stage;
    @Override
    public void start(Stage stage) throws Exception {
        //让舞台赋值给静态属性
        javafx03tage.stage =stage;
        stage.setTitle("小应用测试");
        //创建布局
        HBox hbox = new HBox();
        //创建控件
        TextField textField = new TextField();
        Button button = new Button("确定");
        button.setOnAction((e)->{
            String a = textField.getText();
            System.out.println("输入的内容为:"+a);
        });
        Button regist = new Button("注册");
        //写法1
//        regist.setOnAction((e)->{
//            regis();
//        });
//        写法2
        regist.setOnAction(e->javafx03tage.regis());
        //将控件加入布局
        hbox.getChildren().addAll(textField,button,regist);
//        hbox.getChildren().add(textField);
//        hbox.getChildren().add(button);
        //将布局加入场景
        Scene scene = new Scene(hbox,300,200);
        //将场景放入舞台
        stage.setScene(scene);
        stage.show();
    }
    public static void regis(){
        //创建垂直布局
        VBox vbox = new VBox();
        //创建控件
        TextField t1 = new TextField();
        TextField t2 = new TextField();
        Button b1 = new Button("注册");
        vbox.getChildren().addAll(t1,t2,b1);
        Scene scene = new Scene(vbox,300,200);
        javafx03tage.stage.setScene(scene);
    }
    public static void main(String[] args) {
        launch();
    }
}


platform、screen类


Platform类

public class platformcalss extends Application{
   public static void main(String[] args) {
     launch(args);
   }
   @Override
   public void start(Stage primaryStage) throws Exception {
     //设置为false,当窗口关闭,程序仍然运行,如要关闭则Platform.exit(); 若为true,窗口关闭,程序关闭
     //Platform.setImplicitExit(false);
     //是否支持3D效果
     boolean b = Platform.isSupported(ConditionalFeature.SCENE3D);
     Platform.runLater(new Runnable() {
        @Override
        public void run()
        {
           System.out.println("run方法里的线程名字:"+Thread.currentThread().getName());
           //可以在这里更新组件
        }
     });
   }
}


screen类

public class Screencalss extends Application{
   public static void main(String[] args) {
     launch(args);
   }
   @Override
   public void start(Stage primaryStage) throws Exception {
     //获取屏幕
     Screen screen = Screen.getPrimary();
     //获取屏幕全部宽度,高度
     Rectangle2D rec1= screen.getBounds();
     //获取可视范围的宽度,高度
     Rectangle2D rec2= screen.getVisualBounds();
     System.out.println(rec1.getWidth());
     System.out.println(rec2.getWidth());
     Platform.exit();
   }
}


Scene场景类


scene类电脑屏幕相关


JavaFX场景入门(下):https://developer.aliyun.com/article/1431708

目录
相关文章
|
5月前
|
XML IDE Java
JavaFX 教程
JavaFX 教程
196 1
QGS
|
6月前
|
容器
JavaFX场景入门(下)
JavaFX场景入门
QGS
71 0
|
SQL 安全 小程序
javaFx 工具开发
javaFx 工具开发
|
安全 Java
javaFx 安全开发 三
javaFx 安全开发
|
IDE Java 开发工具
QGS
|
Java
JAVAFX+SceneBuilder基础入门
环境:JDK1.8+IDEA fxml载入项目 通过SceneBuilder编写好布局,生成fxml文件。
QGS
191 0
QGS
JAVAFX+SceneBuilder基础
记JAVAFX+SceneBuilder基础
QGS
126 0
JAVAFX+SceneBuilder基础
|
Java Maven 图形学
JavaFx教程(一) 基本概念
JavaFx教程(一) 基本概念
JavaFx教程(一) 基本概念