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