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()函数只是为了向前兼容。
如例子:
点击(此处)折叠或打开
- public class UseFxml extends Application {
- @Override
- public void start(Stage primaryStage) throws Exception{
- Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
- primaryStage.setTitle("Hello World");
- primaryStage.setScene(new Scene(root, 300, 275));
- primaryStage.show();
- }
- public static void main(String[] args) {
- launch(UseFxml.class , args);
- }
- }
点击(此处)折叠或打开
- <?import javafx.scene.layout.GridPane?>
- <?import javafx.scene.control.Label?>
- <?import javafx.scene.text.Font?>
- <GridPane fx:controller="sample.Controller"
- xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
- <Label text="Welcome to JavaFX!" textFill="green">
- <font>
- <Font name="Times New Roman bold" size="20"/>
- </font>
- </Label>
- </GridPane>
2. 你可以使用FXML文件来当作"view",甚至也可以直接用代码来写。
main()的调用方式,我看到下面的两种调用方式,都能用。
launch(UseFxml.class, args);
launch(args);
下面的代码跟上面的使用FXML文件效果是一样的。
点击(此处)折叠或打开
- public class Main extends Application {
- @Override
- public void start(Stage primaryStage) throws Exception{
- //Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
- GridPane root = new GridPane();
- root.setAlignment(Pos.CENTER);
- root.setVgap(10);
- root.setHgap(10);
- primaryStage.setTitle("Hello World");
- primaryStage.setScene(new Scene(root, 300, 275));
- Label greeting = new Label("Welcome to JavaFX!");
- greeting.setTextFill(Color.GREEN);
- greeting.setFont(Font.font("Times New Romen", FontWeight.BOLD, 20));
- root.getChildren().add(greeting);
- primaryStage.show();
- }
- public static void main(String[] args) {
- launch(args);
- }
- }
3. 安装JavaFX scene builder,然后在Intelli J里面选中.fxml文件,就可以选择open in scenebuilder了.
http://www.oracle.com/technetwork/java/javafxscenebuilder-1x-archive-2199384.html
自从8u40以后就不再有scenebuilder这个软件了。
4. all the layout including HBox, inherit from Node, keyboard and mouse events can be consumed
by layout.
5. 最简单的处理Mouse Event的例子。
点击(此处)折叠或打开
- public class event2 extends Application implements Initializable {
- @FXML
- private Label label;
- @Override
- public void initialize(URL url, ResourceBundle rb){
- //TODO
- }
- @FXML
- private void handleButtonAction(ActionEvent event){
- System.out.println("You clicked me !");
- label.setText("Hello World!");
- }
- @Override
- public void start(Stage primaryStage) throws Exception{
- Parent root = FXMLLoader.load(getClass().getResource("event2.fxml"));
- primaryStage.setTitle("Hello World");
- primaryStage.setScene(new Scene(root, 300, 275));
- primaryStage.show();
- }
- public static void main(String[] args) {
- launch(args);
- }
- }
点击(此处)折叠或打开
- <?xml version="1.0" encoding="UTF-8"?>
- <?import javafx.scene.control.*?>
- <?import javafx.scene.layout.*?>
- <AnchorPane xmlns="http://javafx.com/javafx"
- xmlns:fx="http://javafx.com/fxml"
- fx:controller="events.event2"
- prefHeight="400.0" prefWidth="600.0">
- <children>
- <Button id="button" layoutX="126" layoutY="90" text="Click me"
- onAction="#handleButtonAction" fx:id="button" />
- <Label id="label" layoutX="126" layoutY="120" minHeight="16"
- minWidth="69" prefHeight="16" prefWidth="169" fx:id="label" />
- </children>
- </AnchorPane>