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

22 篇文章 1 订阅
4 篇文章 0 订阅

做了一个简单的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文档的简单项目(文章没有写这部分内容)。

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

  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值