做了一个简单的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文档的简单项目(文章没有写这部分内容)。
虽然简单,但是一个完整的可运行的项目,也是初学只是实现了功能,项目完成了可以用,有时间还得重构一次,到时候再写一个完整的例子。