JavaFX入门及相关问题
下个星期是我们专业的课程设计专周,主要是做一个Java的桌面应用程序,老师上课讲的是用Swing来开发图形化界面,但是听朋友说到一个可视化的图形界面工具JavaFX,本
人愚笨,弄了一天才大致调试完成,分享一下调试过程中遇到的问题和解决方案。
1.配置环境
1. JavaFX的jar包直接导入到IDEA中就行了,快捷键shit+ctrl+alt+s
2.设置Scene Builder 执行路径(settings→Languages&Frameworks→JavaFX)
到这里环境算是配置好了,接下来光速了解一下JavaFX吧
2-创建MyScene项目
项目结构确实不规范,就当随笔写了,权当是个Test,首先新建一个FXML文件,作为页面布局,Mycontrol作为业务逻辑管理,Main是加载FXML中的控件,下面会详细讲到。
3- Mycontrol 示例说明
下图显示了舞台(Stage),场景(Scene),容器(Container),布局(Layout )和控件(Controls)之间的关系:
Button
,Text
,…或容器。 4- JavaFX Scene Builder
XML
代码保存在*.fxml
文件中。 5-使用JavaFX Scene Builder的示例
- 在VIEW上显示它
- 用户使用CONTROLLER
- 操作数据(更新,修改,删除,..),MODEL上的数据已更改。
- 在VIEW上显示MODEL的数据。
下面我们来创建一个新的 MySecene.xml
文件。
可以使用 JavaFX Scene Builder 打开 fxml
文件。
MyScene.fxml
的界面设计屏幕如下:将Button
的 Id
设置为“myButton
”,可以通过其 Id
从Java代码访问这Button
。设置方法将在单击按钮时调用。同时设置一下On Action 作为事件响应。
同理,将 TextField
拖放到AnchorPane
中。设置TextField
的ID
,将其作为“myTextField
”新拖放到AnchorPane
中,可以通过其ID在Java代码中访问这个TextField
。
选择文件/保存以保存更改。并在窗口中选择“预览/显示预览”以预览您的设计。
显示结果如下 -
MyScene.fxml
文件中生成的代码:(我生成的id前面没有fx,但是在网上看到各位师傅是加了fx,所以就自己手动添加了,明天再试试不加有没有什么影响)<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?> <AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="MyController">
<children>
<Button id="myButton" fx:id="myButton" layoutX="172.0" layoutY="72.0" mnemonicParsing="false" onAction="#showDate" text="Say Hello" />
<TextField id="myTextField" fx:id="myTextField" layoutX="172.0" layoutY="134.0" />
</children>
</AnchorPane>
fx:controller
添加到<AnchorPane>
中,Controller
将对位于AnchorPane
内部的控件(如myButton
和myTextField
)有引用。 控制器(Controller)
以下是 MyController.java
文件的内容 -
import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ResourceBundle; import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TextField; public class MyController implements Initializable { @FXML
private Button myButton; @FXML
private TextField myTextField; @Override
public void initialize(URL location, ResourceBundle resources) { // TODO (don't really need to do anything here). } // When user click on myButton
// this method will be called.
public void showDate() { //之前这里的代码是public void showDateTime(ActionEvent event) 但是系统一直报错event not use,
//后来误打误撞把ActionEvent event删了,程序就能运行了,明天再看看是什么原因
System.out.println("Button Clicked!"); Date now= new Date(); DateFormat df = new SimpleDateFormat("yyyy-dd-MM HH:mm:ss");
String dateTimeString = df.format(now);
// Show in VIEW
myTextField.setText(dateTimeString); } }
Main.java 文件的内容如下 -
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
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) {
try {
// Read file fxml and draw interface.
Parent root = FXMLLoader.load(getClass().getResource("/MyScene.fxml")); primaryStage.setTitle("My Application");
primaryStage.setScene(new Scene(root));
primaryStage.show(); } catch(Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
launch(args);
}
}
执行上面的代码,得到以下结果 -
最新文章
- node基础09:第2个node web服务器
- nodejs概要
- iOS---去除url中的反斜扛
- web安全及防护
- Redo与undo在开发中的使用
- JDK - Tomcat - JSP - Servlet 配置运行全攻略(转)
- axf、elf文件转换成bin、hex脚本工具
- 达内TTS6.0课件oop_day01
- Codeforces Round #198 (Div. 2) C. Tourist Problem (数学+dp)
- hdu5573 二叉树找规律,二进制相关
- Spark环境搭建(六)-----------sprk源码编译
- Expression Trees 参数简化查询
- 设计模式理解(十)结构型——享元(Flyweight)
- Java获取请求主机真实ip
- java web 开发入门 --- tomcat/servlet/jsp
- Nginx 完整安装篇
- c语言: 修改参数的地址,及注意事项
- canvas 背景透明
- python字符串内置函数
- Pygame 加载音频
热门文章
- EXSI6.7 中给虚拟机磁盘扩容
- yum 安装的历史与撤销(yum history undo )
- PEP小学五年级英语下册 mp3 音频和电子书
- RepLKNet:不是大卷积不好,而是卷积不够大,31x31卷积了解一下 | CVPR 2022
- 跑马灯带你深入浅出TextView的源码世界
- Python之GUI用户界面Tkinter(一)
- eclipse新建maven项目:&#39;Building&#39; has encountered a problem. Errors occurred during the build.
- python中判断为None
- java线程池之newFixedThreadPool定长线程池
- callbale 和runnable 区别