Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1782314
  • 博文数量: 297
  • 博客积分: 285
  • 博客等级: 二等列兵
  • 技术积分: 3006
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-06 22:04
个人简介

Linuxer, ex IBMer. GNU https://hmchzb19.github.io/

文章分类

全部博文(297)

文章存档

2020年(11)

2019年(15)

2018年(43)

2017年(79)

2016年(79)

2015年(58)

2014年(1)

2013年(8)

2012年(3)

分类: Java

2017-09-05 14:54:15

最近看了些JavaFX,感觉写法上比较灵活。 
1. JavaFX遵循MVC-pattern,
在Intelli J里面创建的Project 是一个Main.java, 一个Controller.java 还有一个sample.fxml文件。
.fxml文件对应 "view",Controller.java就是"controller",最后一个main.java则对应"model".
我的示例代码简单的用一个java文件和一个FXML文件来做所有事情,等于我把controller和model写在了一个
文件里。最后main() 函数可以有,也可以没有. main()函数只是为了向前兼容。

如例子:

点击(此处)折叠或打开

  1. public class UseFxml extends Application {

  2.     @Override
  3.     public void start(Stage primaryStage) throws Exception{
  4.         Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
  5.         primaryStage.setTitle("Hello World");
  6.         primaryStage.setScene(new Scene(root, 300, 275));
  7.         primaryStage.show();
  8.     }

  9.     public static void main(String[] args) {
  10.         launch(UseFxml.class , args);
  11.     }
  12. }
下面是sample.fxml的内容。

点击(此处)折叠或打开

  1. <?import javafx.scene.layout.GridPane?>
  2. <?import javafx.scene.control.Label?>
  3. <?import javafx.scene.text.Font?>
  4. <GridPane fx:controller="sample.Controller"
  5.           xmlns:fx="" alignment="center" hgap="10" vgap="10">
  6.     <Label text="Welcome to JavaFX!" textFill="green">
  7.         <font>
  8.             <Font name="Times New Roman bold" size="20"/>
  9.         </font>
  10.     </Label>
  11. </GridPane>

2. 你可以使用FXML文件来当作"view",甚至也可以直接用代码来写。
main()的调用方式,我看到下面的两种调用方式,都能用。
launch(UseFxml.class, args);
launch(args);
下面的代码跟上面的使用FXML文件效果是一样的。

点击(此处)折叠或打开

  1. public class Main extends Application {

  2.     @Override
  3.     public void start(Stage primaryStage) throws Exception{
  4.         //Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
  5.         GridPane root = new GridPane();
  6.         root.setAlignment(Pos.CENTER);
  7.         root.setVgap(10);
  8.         root.setHgap(10);

  9.         primaryStage.setTitle("Hello World");
  10.         primaryStage.setScene(new Scene(root, 300, 275));

  11.         Label greeting = new Label("Welcome to JavaFX!");
  12.         greeting.setTextFill(Color.GREEN);
  13.         greeting.setFont(Font.font("Times New Romen", FontWeight.BOLD, 20));
  14.         root.getChildren().add(greeting);
  15.         primaryStage.show();
  16.     }


  17.     public static void main(String[] args) {
  18.         launch(args);
  19.     }
  20. }

3. 安装JavaFX scene builder,然后在Intelli J里面选中.fxml文件,就可以选择open in scenebuilder了.

自从8u40以后就不再有scenebuilder这个软件了。

4. all the layout including HBox, inherit from Node, keyboard and mouse events can be consumed 
by layout.

5. 最简单的处理Mouse Event的例子。

点击(此处)折叠或打开

  1. public class event2 extends Application implements Initializable {

  2.     @FXML
  3.     private Label label;

  4.     @Override
  5.     public void initialize(URL url, ResourceBundle rb){
  6.         //TODO
  7.     }

  8.     @FXML
  9.     private void handleButtonAction(ActionEvent event){
  10.         System.out.println("You clicked me !");
  11.         label.setText("Hello World!");
  12.     }

  13.     @Override
  14.     public void start(Stage primaryStage) throws Exception{
  15.         Parent root = FXMLLoader.load(getClass().getResource("event2.fxml"));
  16.         primaryStage.setTitle("Hello World");
  17.         primaryStage.setScene(new Scene(root, 300, 275));
  18.         primaryStage.show();
  19.     }

  20.     public static void main(String[] args) {
  21.         launch(args);
  22.     }
  23. }
下面是event2.fxml的内容

点击(此处)折叠或打开

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?import javafx.scene.control.*?>
  3. <?import javafx.scene.layout.*?>

  4. <AnchorPane xmlns=""
  5.             xmlns:fx=""
  6.             fx:controller="events.event2"
  7.             prefHeight="400.0" prefWidth="600.0">

  8.     <children>
  9.         <Button id="button" layoutX="126" layoutY="90" text="Click me"
  10.                 onAction="#handleButtonAction" fx:id="button" />
  11.         <Label id="label" layoutX="126" layoutY="120" minHeight="16"
  12.                minWidth="69" prefHeight="16" prefWidth="169" fx:id="label" />
  13.     </children>
  14. </AnchorPane>



阅读(915) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~