使用Eclipse编写JavaFX应用
程序员文章站
2024-02-06 23:08:34
...
JavaFX是由Oracle推出的用于创建Rich Internet application的技术。JavaFX可以制作桌面应用,配合Scene Builder可以很方面的制作界面。
jdk8是包含JavaFX的,但是在jdk11中成为独立的一个部分,因此需要在工程中引入相关的jar文件。
在Eclipse中编写JavaFX应用需要下载E(fx)clipse,以及用于可视化布局操作的Scene Builder。E(fx)clipse 可以在Eclipse的marketplace中下载
Scene Builder的下载链接
整个项目是按照这个教程写的JavaFX教程,不过我是创建的一个Maven项目。一开始是选择Gradle作为构建工具,但是一直出现“JavaFX 缺少必要组件”之类的错误,后来简单了解了一下,Maven在引入依赖后,会把相关的依赖都引入。下面是pom.xml文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>sample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>sample</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11</version>
</dependency>
</dependencies>
</project>
但是在编写完一个简单的界面后,运行程序出现了下面的错误:
看了一些博客,最终的解决办法是另外创建一个启动类,并在该类的main方法中启动程序。MainApp.java以及启动类代码如下:
MainApp.java
package com.sample;
import java.io.IOException;
import java.nio.file.Paths;
import com.sample.model.Person;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.BorderPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
public class MainApp extends Application{
private Stage primaryStage;
private BorderPane rootLayout;
private ObservableList<Person> personData=FXCollections.observableArrayList();
public MainApp() {
personData.add(new Person("Hans", "Muster"));
personData.add(new Person("Ruth", "Mueller"));
personData.add(new Person("Heinz", "Kurz"));
personData.add(new Person("Cornelia", "Meier"));
personData.add(new Person("Werner", "Meyer"));
personData.add(new Person("Lydia", "Kunz"));
personData.add(new Person("Anna", "Best"));
personData.add(new Person("Stefan", "Meier"));
personData.add(new Person("Martin", "Mueller"));
}
@Override
public void start(Stage primaryStage) throws Exception {
this.primaryStage=primaryStage;
this.primaryStage.setTitle("JFX App");
this.primaryStage.getIcons().add(new Image("file:resources/image/book.png"));
try {
initLayout();
} catch (IOException e) {
e.printStackTrace();
}
}
public void initLayout() throws IOException {
FXMLLoader loader=new FXMLLoader();
loader.setLocation(MainApp.class.getResource("root_view.fxml"));
rootLayout=(BorderPane)loader.load();
Scene scene=new Scene(rootLayout);
RootViewController controller=loader.getController();
controller.setMainApp(this);
primaryStage.setScene(scene);
primaryStage.show();
}
public Stage getPrimaryStage() {
return primaryStage;
}
public void setPrimaryStage(Stage primaryStage) {
this.primaryStage = primaryStage;
}
public ObservableList<Person> getPersonData() {
return personData;
}
public void setPersonData(ObservableList<Person> personData) {
this.personData = personData;
}
public boolean showPersonEditDialog(Person person) {
try {
FXMLLoader loader=new FXMLLoader();
loader.setLocation(MainApp.class.getResource("person_edit.fxml"));
BorderPane borderPane=loader.load();
// create dialog stage
Stage dialogStage=new Stage();
dialogStage.setTitle("Edit Person");
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.initOwner(primaryStage);
Scene scene=new Scene(borderPane);
dialogStage.setScene(scene);
// set person into controller
PersonEditDialogController personEditDialogController=loader.getController();
personEditDialogController.setDialogStage(dialogStage);
personEditDialogController.setPerson(person);
dialogStage.showAndWait();
return personEditDialogController.isOkClicked();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
public static void main(String[] args) {
launch(args);
}
}
Starter.java
package com.sample;
public class Starter {
public static void main(String[] args) {
MainApp.main(args);
}
}
整个项目的结构如下图:
程序运行效果:
推荐阅读
-
使用Eclipse编写JavaFX应用
-
使用NetBeans和Eclipse开发PHP应用程序(1)
-
WAS5.x 下使用 Log4j 为何没有日志输出的详细分析及解决办法 log4jWebsphereApache应用服务器Eclipse
-
使用python编写脚本获取手机当前应用apk的信息
-
使用Eclipse CDT编写C++代码
-
使用 acl 库编写高效的 C++ redis 客户端应用
-
使用 acl_cpp 的 HttpServlet 类及 google 的 ctemplate 库编写 WEB 应用
-
使用python编写脚本获取手机当前应用apk的信息
-
在eclipse使用map reduce编写word count程序生成jar包并在虚拟机运行的步骤
-
使用Eclipse编写MapReduce程序