用java(javaFX)开发一个完整的桌面程序。javaFX简单入门。

it2024-08-02  38

做了一个简单的javaFX桌面应用,因为是学java出身的,所以只能选择javaFX了。应用是装在单机电脑上用来收集数据的,没有使用数据库,数据存储在excel表格中。

1.起步

JavaFX的API已经完整地集成到了JRE和JDK之中。所以开发起来很方便,不需要导包,eclipse只需要建一个java项目就可以开始写代码了。项目写完打包成jar包在有jdk环境的电脑上就可以直接运行了,也可以打包成EXE文件。

下面是一个最简单的项目:打包后运行将弹出一个窗口,也可以打包成exe项目,只是没有意义。

import javafx.application.Application; import javafx.stage.Stage; public class HelloWorld extends Application { @Override public void start(Stage primaryStage) throws Exception { primaryStage.show(); } public static void main(String[] args) { launch(args); } }

2.控件

javaFX有许多控件,一般需要实例化控件(按钮,文本输入等),然后创建布局(有多种布局,类似于HTML),将控件放在布局上,创建场景,将场景添加到窗口上,显示窗口,就是一个完整的例子。

方位布局:

// 2.0.AnchorPane布局 AnchorPane apTop = new AnchorPane(); apTop.setStyle("-fx-background-color:#CCCCCC"); AnchorPane apLeft = new AnchorPane(); apLeft.setStyle("-fx-background-color:#66CCCC"); AnchorPane apBottom = new AnchorPane(); apBottom.setStyle("-fx-background-color:#11CCCC"); AnchorPane apRight = new AnchorPane(); apRight.setStyle("-fx-background-color:#CCCCCC"); apRight.setPrefWidth(200); AnchorPane apCenter = new AnchorPane();

 具体一组控件:

// 3.0主界面 输入框等 // 3.1四个输入框,以及提示 Label y_name = new Label("姓名:"); y_name.setFont(Font.font(15)); TextField e_name = new TextField(); e_name.setPrefWidth(100); Label y_gender = new Label("性别:"); y_gender.setFont(Font.font(15)); // TextField e_gender = new TextField(); ChoiceBox<String> e_gender = new ChoiceBox<String>(); e_gender.getItems().addAll("男", "女"); e_gender.setPrefWidth(100); Label y_age = new Label("出生日期:"); y_age.setFont(Font.font(15)); DatePicker e_age = new DatePicker(); e_age.setPrefWidth(100); Label y_date = new Label("日期:"); y_date.setFont(Font.font(15)); DatePicker e_date = new DatePicker(); e_date.setValue(LocalDate.now()); e_date.setPrefWidth(100); // 3.2网格布局 基本信息 GridPane gridPane = new GridPane(); gridPane.setPrefWidth(756); // 3.3给布局添加元素 gridPane.add(y_name, 0, 0); gridPane.add(e_name, 1, 0); gridPane.add(y_gender, 2, 0); gridPane.add(e_gender, 3, 0); gridPane.add(y_age, 4, 0); gridPane.add(e_age, 5, 0); gridPane.add(y_date, 6, 0); gridPane.add(e_date, 7, 0); // 3.4设置水平及垂直的边距,以及外边距 gridPane.setHgap(20); gridPane.setVgap(20); // 3.4设置内边距 gridPane.setPadding(new Insets(10)); // 3.5设置边框 gridPane.setStyle("-fx-border-color: #b1b1b1 #b1b1b1 #b1b1b1 #b1b1b1;-fx-border-width: 1px");

将控关联到布局上,然后显示出来:

apCenter.getChildren().addAll(gridPane);//多个 //方位布局; BorderPane bor = new BorderPane(); bor.setCenter(apCenter); // 2.3设置对齐方式 BorderPane.setAlignment(printButton, Pos.CENTER); BorderPane.setAlignment(saveButton, Pos.CENTER); // 2.4.界面 Scene scene = new Scene(bor); primaryStage.setScene(scene); primaryStage.setTitle("一个页面"); primaryStage.setHeight(600); primaryStage.setWidth(1000); primaryStage.show();

一个完整的页面就会显示出来:

DatePicker e_date = new DatePicker(); e_date.setValue(LocalDate.now());

最后一个控件设置了当前的时间,所以会自己显示时间。

获取填写的内容可通过:类似下边的代码获取,根据控件不同方式也有所不同。

e_name.getText()

3.事件

例如通过一个按钮获取上边表单输入的数据,并写入excel中,就可在保存按钮中写一些代码实现这个功能:

按钮:通过第二步  2控件  里的方式放在合适的位置

Button saveButton = new Button("仅保存");

给按钮添加事件:

// 仅保存 saveButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { // 1.收集信息-------加到对象中---------------------------- Glands glands = new Glands(); glands.setE_name(e_name.getText());// 姓名 glands.setE_gender(e_gender.getValue());// 性别 glands.setE_age(e_age.getValue().toString());// 年龄 glands.setE_date(e_date.getValue().toString());// 日期 // 3.写入Excel ExcelSave excelsave = new ExcelSave(); try { excelsave.createExcel(glands); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } saveWindow win = new saveWindow(); // 基础数据 e_name.setText(""); e_age.setValue(null); e_gender.setValue(null); } });

这段代码做了很多事,将页面的输入内容收集到实体类(Glands)中,然后调用ExcelSave的方法保存数据,最后清空输入的内容,方便下次输入。

中间还调用了一个弹出窗口:在数据保存之后会提示。

class saveWindow {// 保存成功提示 private final Stage stage = new Stage(); public saveWindow() { Text text = new Text("保存成功!"); text.setFont(Font.font(20)); text.setFill(Color.web("#008000")); BorderPane bor = new BorderPane();// 布局方式 bor.setStyle("-fx-background-color:White"); bor.setCenter(text); Scene scene = new Scene(bor); stage.setScene(scene); stage.setTitle("提示"); stage.setWidth(350); stage.setHeight(200); stage.setResizable(false);// 不可以缩放 stage.setAlwaysOnTop(true);// 始终在最上面 stage.initModality(Modality.APPLICATION_MODAL);// 模态框 stage.show(); }

总结:

要写完整功能强大的javaFX项目还需要很多知识,页面的切换,各个页面直接数据的调取等等许多的知识点,项目越大需要规划的越多,前后分离之类的。不然会进行不下去的。

这个项目只是一个简单的将数据收集到excel表中和调用打印机打印word文档的简单项目(文章没有写这部分内容)。

虽然简单,但是一个完整的可运行的项目,也是初学只是实现了功能,项目完成了可以用,有时间还得重构一次,到时候再写一个完整的例子。

最新回复(0)