JavaFX之Scene Builder详细使用说明之设置篇(4)——代码Code

目录

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就可以看到设置的点击事件方法:

img

接着就可以在控制器类中写事件的具体处理方法,如点击按钮弹出一个信息框:

 

DragDrop面板

主要是拖动事件方法。

img

  • 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中完全按下并释放的手势(通过释放鼠标按钮)结束时要触发的事件。

写一个测试:

img

控制器类代码如下:

    @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");
    }

当拖动一个文件到按钮控件上时,就会在控制台打印。

img

img

 

Keyboard面板

img

On Input Method Text Changed:当输入框内容变化时触发该事件,但是该事件的触发好像有些问题,只有输入法是全角时才会触发,并且输入中文无效。如果需要监听TextField控件值变化还请使用JavaFX代码而不是用这个事件方法。

 

On Key Pressed:当键盘按键被按下的时候触发事件。

On Key Released:当键盘按键按下后被释放的时候触发事件。

On Key Typed:只会响应文字输入键,如字母、数字和标点符号等,它不会响应CTRL/ENTER/F1等功能键。

打印结果:

 

Mouse面板

主要是处理一些鼠标事件。

img

各个事件说明:

  • 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面板

主要是处理控件旋转动作事件。

img

各个事件方法说明如下:

  • On Rotate:当控件旋转时触发事件。

  • On Rotation Started:控件旋转开始时触发。

  • On Rotation Finished:控件旋转结束时触发。

 

Swipe面板

主要是处理手势滑动事件。

当JavaFX程序运行在带有触摸屏或者带有可识别手势的触摸板的设备上时就会产生手势事件。在可识别手势的各种平台上,会调用原生的识别机制来确定所执行的手势。

要产生手势事件,你需要在有触摸屏或者有支持手势的触摸板的设备上运行该样例程序。要产生触摸事件,你需要在有触摸屏的设备上运行该样例程序。

img

各个事件方法说明如下:

  • On Swipe Left:定义在此节点上居中发生向左滑动手势时要调用的函数。

  • On Swipe Right:定义在此节点上居中发生向右滑动手势时要调用的函数。

  • On Swipe Up:定义在此节点上居中发生向上滑动手势时要调用的函数。

  • On Swipe Down:定义当在此节点上居中的向下滑动手势发生时要调用的函数。

 

Touch面板

主要处理触摸事件。

触摸事件让用户可以通过触摸屏与JavaFX程序进行交互。

img

各个事件方法说明如下:

  • 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文章应该就是一些布局实例和一些控件特有的属性。

 

 

可搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。

 

以下是实现一个TreeView动态读取文件夹中的内容,并且生成文件数的案例的步骤: 1. 创建一个JavaFX项目 2. 导入Scene Builder插件 3. 在Scene Builder中创建一个TreeView控件,设置它的根节点和显示的列 4. 创建一个Controller类,并将TreeView控件与它绑定 5. 编写代码,在Controller类中读取文件夹中的内容,并将其添加到TreeView控件中 6. 为TreeView控件添加监听器,当节点展开时,动态加载该节点下的子节点 7. 统计文件夹中的文件数量,并在TreeView控件顶部显示 下面我们逐步来实现: 1. 创建一个JavaFX项目,并在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>16</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>16</version> </dependency> ``` 2. 导入Scene Builder插件,在eclipse中,点击Help -> Eclipse Marketplace,在搜索框中搜索Scene Builder,安装该插件并重启eclipse。 3. 在Scene Builder中创建一个TreeView控件,设置它的根节点和显示的列。具体操作如下: - 点击左侧的Library按钮,选择TreeView控件,拖拽到右侧的设计区域中 - 右键点击TreeView控件,选择“Edit Tree Items”,在弹出的窗口中选择“Add Root”,设置根节点的名称和显示的列 - 保存并关闭Scene Builder,会自动生成一个.fxml文件 4. 创建一个Controller类,并将TreeView控件与它绑定。具体操作如下: - 在eclipse中,右键点击.fxml文件,选择“Open with Scene Builder”,打开Scene Builder - 点击左侧的Controller按钮,在右侧的“Controller Class”一栏中输入Controller类的完整路径,点击OK - 在Scene Builder中,选中TreeView控件,点击右侧的“Code”按钮,在弹出的窗口中选择“Use Existing Controller”,选择Controller类 - 关闭Scene Builder,回到eclipse中,创建Controller类,并在其中注入TreeView控件。代码如下: ```java public class Controller { @FXML private TreeView<String> treeView; } ``` 5. 编写代码,在Controller类中读取文件夹中的内容,并将其添加到TreeView控件中。具体操作如下: ```java public void initialize(URL location, ResourceBundle resources) { // 获取根节点 TreeItem<String> root = new TreeItem<>("Root"); root.setExpanded(true); treeView.setRoot(root); // 读取文件夹中的内容 File folder = new File("path/to/folder"); File[] files = folder.listFiles(); // 添加子节点 for (File file : files) { TreeItem<String> item = new TreeItem<>(file.getName()); root.getChildren().add(item); } } ``` 6. 为TreeView控件添加监听器,当节点展开时,动态加载该节点下的子节点。具体操作如下: ```java public void initialize(URL location, ResourceBundle resources) { // 获取根节点 TreeItem<String> root = new TreeItem<>("Root"); root.setExpanded(true); treeView.setRoot(root); // 读取文件夹中的内容 File folder = new File("path/to/folder"); File[] files = folder.listFiles(); // 添加子节点 for (File file : files) { TreeItem<String> item = new TreeItem<>(file.getName()); root.getChildren().add(item); // 为节点添加监听器 item.expandedProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { if (newValue) { File[] subFiles = file.listFiles(); // 添加子节点 for (File subFile : subFiles) { TreeItem<String> subItem = new TreeItem<>(subFile.getName()); item.getChildren().add(subItem); } } } }); } } ``` 7. 统计文件夹中的文件数量,并在TreeView控件顶部显示。具体操作如下: ```java public void initialize(URL location, ResourceBundle resources) { // 获取根节点 TreeItem<String> root = new TreeItem<>("Root"); root.setExpanded(true); treeView.setRoot(root); // 读取文件夹中的内容 File folder = new File("path/to/folder"); File[] files = folder.listFiles(); int fileCount = 0; // 添加子节点 for (File file : files) { TreeItem<String> item = new TreeItem<>(file.getName()); root.getChildren().add(item); // 为节点添加监听器 item.expandedProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { if (newValue) { File[] subFiles = file.listFiles(); // 添加子节点 for (File subFile : subFiles) { TreeItem<String> subItem = new TreeItem<>(subFile.getName()); item.getChildren().add(subItem); } } } }); // 统计文件数 if (file.isFile()) { fileCount++; } else { fileCount += file.listFiles().length; } } // 显示文件数 treeView.setTop(new Label("Total files: " + fileCount)); } ``` 这样就完成了一个TreeView动态读取文件夹中的内容,并且生成文件数的案例。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值