目录
Code窗口预览
Identity面板
Main面板
DragDrop面板
Keyboard面板
Mouse面板
Rotation面板
Swipe面板
Touch面板
Zoom面板
其他
总结
Code窗口预览
Code窗口主要就是配置控件事件方法。
Identity面板
为控件设置fx:id,设置后就可以在控制器类中调用该控件对象,设置该控件的属性和方法。
在View菜单下的Show Sample Controller Skeleton就可以看到设置的该控件对象。
就可以在Controller.java类中进行操作,比如说写个背景色:
initialize()方法是初始化方法,初始化配置界面。
Main面板
设置按钮控件的点击事件,是按钮最常用的事件处理方法。
在View菜单下的Show Sample Controller Skeleton就可以看到设置的点击事件方法:
接着就可以在控制器类中写事件的具体处理方法,如点击按钮弹出一个信息框:
DragDrop面板
主要是拖动事件方法。
- On Drag Detected:当你从一个Node上进行拖动的时候,会检测到拖动操作,将会执行这个EventHandler。
- On Drag Done:当你拖动并松手的时候,执行Drag完成操作。
- On Drag Dropped:当你拖动到目标并松开鼠标的时候,执行这个DragDropped事件。
- On Drag Entered:当你拖动到目标控件的时候,会执行这个事件回调。
- On Drag Exited:当你拖动移出目标控件的时候,执行这个操作。
- On Drag Over: 当某被拖动的对象在另一对象容器范围内拖动时触发此事件,会不停的执行。
- On Mouse Drag Entered:定义当完全按下并释放手势进入节点Node时要触发的事件。
- On Mouse Drag Exited:定义当完全按下并释放手势离开节点Node时要触发的事件。
- On Mouse Drag Over:定义在节点Node中完全按下并释放手势时要触发的事件。
- On Mouse Drag Released:定义在节点Node中完全按下并释放的手势(通过释放鼠标按钮)结束时要触发的事件。
写一个测试:
控制器类代码如下:
@FXML
void OnDragDetected(MouseEvent event) {
System.out.println("OnDragDetected");
}
@FXML
void OnDragDone(DragEvent event) {
System.out.println("OnDragDone");
}
@FXML
void OnDragDropped(DragEvent event) {
System.out.println("OnDragDropped");
}
@FXML
void OnDragEntered(DragEvent event) {
System.out.println("OnDragEntered");
}
@FXML
void OnDragExited(DragEvent event) {
System.out.println("OnDragExited");
}
@FXML
void OnDragOver(DragEvent event) {
System.out.println("OnDragOver");
}
@FXML
void OnMouseDragEntered(MouseDragEvent event) {
System.out.println("OnMouseDragEntered");
}
@FXML
void OnMouseDragExited(MouseDragEvent event) {
System.out.println("OnMouseDragExited");
}
@FXML
void OnMouseDragOver(MouseDragEvent event) {
System.out.println("OnMouseDragOver");
}
@FXML
void OnMouseDragReleased(MouseDragEvent event) {
System.out.println("OnMouseDragOver");
}
public void Label_OnDragDropped(DragEvent dragEvent) {
System.out.println("Label_OnDragDropped");
}
当拖动一个文件到按钮控件上时,就会在控制台打印。
Keyboard面板
On Input Method Text Changed:当输入框内容变化时触发该事件,但是该事件的触发好像有些问题,只有输入法是全角时才会触发,并且输入中文无效。如果需要监听TextField控件值变化还请使用JavaFX代码而不是用这个事件方法。
On Key Pressed:当键盘按键被按下的时候触发事件。
On Key Released:当键盘按键按下后被释放的时候触发事件。
On Key Typed:只会响应文字输入键,如字母、数字和标点符号等,它不会响应CTRL/ENTER/F1等功能键。
打印结果:
Mouse面板
主要是处理一些鼠标事件。
各个事件说明:
- On Context Menu Requested:当鼠标右键单击时触发该事件。
- On Mouse Clicked:当鼠标点击时触发事件。
- On Mouse Dragged:当鼠标拖动该控件时触发事件。
- On Mouse Entered:当鼠标进入该控件范围内触发。
- On Mouse Exited:当鼠标离开该控件范围内触发。
- On Mouse Moved:当鼠标在控件范围内移动触发。
- On Mouse Pressed:当鼠标按下左键或右键时触发事件。
- On Mouse Released:当鼠标松开按键时触发事件。
- On Scroll:当滚动鼠标滚轮时触发事件。
- On Scroll Started:定义检测到滚动手势时要调用的事件。
- On Scroll Finished:定义滚动手势结束时要调用的事件。
Rotation面板
主要是处理控件旋转动作事件。
各个事件方法说明如下:
- On Rotate:当控件旋转时触发事件。
- On Rotation Started:控件旋转开始时触发。
- On Rotation Finished:控件旋转结束时触发。
Swipe面板
主要是处理手势滑动事件。
当JavaFX程序运行在带有触摸屏或者带有可识别手势的触摸板的设备上时就会产生手势事件。在可识别手势的各种平台上,会调用原生的识别机制来确定所执行的手势。
要产生手势事件,你需要在有触摸屏或者有支持手势的触摸板的设备上运行该样例程序。要产生触摸事件,你需要在有触摸屏的设备上运行该样例程序。
各个事件方法说明如下:
- On Swipe Left:定义在此节点上居中发生向左滑动手势时要调用的函数。
- On Swipe Right:定义在此节点上居中发生向右滑动手势时要调用的函数。
- On Swipe Up:定义在此节点上居中发生向上滑动手势时要调用的函数。
- On Swipe Down:定义当在此节点上居中的向下滑动手势发生时要调用的函数。
Touch面板
主要处理触摸事件。
触摸事件让用户可以通过触摸屏与JavaFX程序进行交互。
各个事件方法说明如下:
- On Touch Moved:定义移动触摸点时要调用的函数。
- On Touch Pressed:定义当按下新的接触点时要调用的函数。
- On Touch Released:定义释放触摸点时要调用的函数。
- On Touch Stationary:定义当触摸点保持静止不动时要调用的函数。
Zoom面板
主要处理缩放事件,也需要通过触摸设备来触发实现。
各个事件方法如下:
- On Zoom:定义用户执行缩放操作时要调用的函数。
- On Zoom Started:定义检测到缩放手势时要调用的函数。
- On Zoom Finished:定义在缩放手势结束时要调用的函数。
其他
把本节的代码贴出来可以看下:
Controller.java
package sample;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.input.*;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.paint.Color;
public class Controller {
public TextField textField;
@FXML
private Button clickMe;
public void initialize() {
clickMe.setBackground(new Background(new BackgroundFill(Color.RED, null, null)));
}
@FXML
void ClickMe_Event(ActionEvent event) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setContentText("您点击了按钮哟!");
alert.show();
}
@FXML
void OnDragDetected(MouseEvent event) {
System.out.println("OnDragDetected");
}
@FXML
void OnDragDone(DragEvent event) {
System.out.println("OnDragDone");
}
@FXML
void OnDragDropped(DragEvent event) {
System.out.println("OnDragDropped");
}
@FXML
void OnDragEntered(DragEvent event) {
System.out.println("OnDragEntered");
}
@FXML
void OnDragExited(DragEvent event) {
System.out.println("OnDragExited");
}
@FXML
void OnDragOver(DragEvent event) {
System.out.println("OnDragOver");
}
@FXML
void OnMouseDragEntered(MouseDragEvent event) {
System.out.println("OnMouseDragEntered");
}
@FXML
void OnMouseDragExited(MouseDragEvent event) {
System.out.println("OnMouseDragExited");
}
@FXML
void OnMouseDragOver(MouseDragEvent event) {
System.out.println("OnMouseDragOver");
}
@FXML
void OnMouseDragReleased(MouseDragEvent event) {
System.out.println("OnMouseDragOver");
}
public void Label_OnDragDropped(DragEvent dragEvent) {
System.out.println("Label_OnDragDropped");
}
public void OnInputMethodTextChanged(InputMethodEvent inputMethodEvent) {
System.out.println(((TextField) inputMethodEvent.getSource()).getText());
}
public void OnKeyPressed(KeyEvent keyEvent) {
System.out.println("OnKeyPressed");
}
public void OnKeyReleased(KeyEvent keyEvent) {
System.out.println("OnKeyReleased");
}
public void OnKeyTyped(KeyEvent keyEvent) {
System.out.println("OnKeyTyped");
}
public void OnContextMenuRequested(ContextMenuEvent contextMenuEvent) {
System.out.println("OnContextMenuRequested");
}
public void OnMouseClicked(MouseEvent mouseEvent) {
System.out.println("OnMouseClicked");
}
public void OnMouseDragged(MouseEvent mouseEvent) {
System.out.println("OnMouseDragged");
}
public void OnMouseEntered(MouseEvent mouseEvent) {
System.out.println("OnMouseEntered");
}
public void OnMouseExited(MouseEvent mouseEvent) {
System.out.println("OnMouseExited");
}
public void OnMouseMoved(MouseEvent mouseEvent) {
System.out.println("OnMouseMoved");
}
public void OnMousePressed(MouseEvent mouseEvent) {
System.out.println("OnMousePressed");
}
public void OnMouseReleased(MouseEvent mouseEvent) {
System.out.println("OnMouseReleased");
}
public void OnScroll(ScrollEvent scrollEvent) {
System.out.println("OnScroll");
}
public void OnScrollFinished(ScrollEvent scrollEvent) {
System.out.println("OnScrollFinished");
}
public void OnScrollStarted(ScrollEvent scrollEvent) {
System.out.println("OnScrollStarted");
}
public void OnRotate(RotateEvent rotateEvent) {
System.out.println("OnRotate");
}
public void OnRotationFinished(RotateEvent rotateEvent) {
System.out.println("OnRotationFinished");
}
public void OnRotationStarted(RotateEvent rotateEvent) {
System.out.println("OnRotationStarted");
}
public void OnSwipeDown(SwipeEvent swipeEvent) {
System.out.println("OnSwipeDown");
}
public void OnSwipeLeft(SwipeEvent swipeEvent) {
System.out.println("OnSwipeLeft");
}
public void OnSwipeRight(SwipeEvent swipeEvent) {
System.out.println("OnSwipeRight");
}
public void OnSwipeUp(SwipeEvent swipeEvent) {
System.out.println("OnSwipeUp");
}
}
Main.java
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main 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, 500, 500));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
sample.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="480.0"
prefWidth="640.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="sample.Controller">
<children>
<Button id="button_one" fx:id="clickMe" layoutX="223.0" layoutY="125.0" mnemonicParsing="false"
onAction="#ClickMe_Event" onContextMenuRequested="#OnContextMenuRequested"
onDragDetected="#OnDragDetected" onDragDone="#OnDragDone" onDragDropped="#OnDragDropped"
onDragEntered="#OnDragEntered" onDragExited="#OnDragExited" onDragOver="#OnDragOver"
onMouseClicked="#OnMouseClicked" onMouseDragEntered="#OnMouseDragEntered"
onMouseDragExited="#OnMouseDragExited" onMouseDragOver="#OnMouseDragOver"
onMouseDragReleased="#OnMouseDragReleased" onMouseDragged="#OnMouseDragged"
onMouseEntered="#OnMouseEntered" onMouseExited="#OnMouseExited" onMouseMoved="#OnMouseMoved"
onMousePressed="#OnMousePressed" onMouseReleased="#OnMouseReleased" onRotate="#OnRotate"
onRotationFinished="#OnRotationFinished" onRotationStarted="#OnRotationStarted" onScroll="#OnScroll"
onScrollFinished="#OnScrollFinished" onScrollStarted="#OnScrollStarted" onSwipeDown="#OnSwipeDown"
onSwipeLeft="#OnSwipeLeft" onSwipeRight="#OnSwipeRight" onSwipeUp="#OnSwipeUp" prefHeight="91.0"
prefWidth="155.0" text="点我"/>
<TextField fx:id="textField" layoutX="191.0" layoutY="270.0"
onInputMethodTextChanged="#OnInputMethodTextChanged" onKeyPressed="#OnKeyPressed"
onKeyReleased="#OnKeyReleased" onKeyTyped="#OnKeyTyped"/>
</children>
</AnchorPane>
总结
看到这里就说明Scene Builder介绍教程已经结束了,本系列教程并没有教你如何布局创建程序界面,只是介绍了软件的配置,相当于一个软件使用说明书吧,而且还不是很完全,但是基本上也够用了。
关于JavaFX使用更多的可以参考网上的教程,本系列教程不涉及。接下来Scene Builder文章应该就是一些布局实例和一些控件特有的属性。