利用JavaFx开发windows应用程序 —— 界面篇

JavaFX打印应用实践
本文介绍了一个基于JavaFX的物流取单机应用开发案例。该应用通过扫描二维码验证单号并打印单据信息,实现了从页面设计到打印功能的全过程。文章详细讲述了项目背景、设计思路、开发流程及关键技术点。

JAVA8新推出了javafx,一直关注,但是一直没有机会在项目中运用。正好最近有一个机会,可以让我体会一下javafx的与众不同。

  • 项目背景:某物流公司需要一批机器用作取单机,主要是通过扫描取单人的二维码,进行单据信息打印。PC主要是windows系统普通电脑、触摸屏、打印机是HP1020黑白激光打印机、扫码机,全部设备封装成一个整机。

  • 设计思路:将javafx程序封装成EXE软件,安装部署在每台机器上,然后通过HTTP发起请求,调取服务器接口,验证和拉取数据。

  • 项目开发过程:页面调试 --> 打印调试 --> 接口调试 --> 导出jar包 --> 封装EXE文件 --> 传入真机测试

项目运行效果:

单号扫面验证页面:

单据打印展示页面:

打印效果页面:

A5纸张,横版打印

项目目录结构:

LoginController是项目的主入口,PrintController是打印页面。application.css是打印页面展示效果的CSS,application_print.css是打印页面打印效果的CSS。lib目录下是该项目所用到的第三方jar包。MainController是测试打印页面的类。

项目主要功能点

这里主要写我做这几个页面时候遇到的问题以及解决方案。

  • 页面之间跳转和传参

单号扫面页面在验证单号成功后,需要跳转到打印页面,并且将单号传递到打印页面的接口中,拉去详细数据。下面是简单的代码实现,具体实现请参考源码中的LoginController


//确定按钮点击事件
btn.setOnAction(new EventHandler<ActionEvent>() {

  @Override
  public void handle(ActionEvent e) {
        //关闭当前页面
        primaryStage.close();
        
        try {
            //打开打印页面,并将参数传递到构造方法中
            new PrintController(“123456” ,primaryStage);
        } catch (Exception e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
        }
  }
});
  • 打印展示页面和打印页面

因为电脑的分辨率比较高,显示内容较多,所以打印页面和展示页面必须分开定义,CSS也需要两套。

  • 打印按钮和打印方法实现

public Parent getPrintBut() {
    /*---------------------------------打印按钮---------------------------------*/
    Button btn = new Button("打印");
    btn.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
    HBox hbBtn = new HBox(10);
    hbBtn.setAlignment(Pos.TOP_CENTER);
    hbBtn.getChildren().add(btn);
    hbBtn.setMaxHeight(300);
    hbBtn.prefHeight(300);
    hbBtn.setFillHeight(false);
    // 打印按钮点击事件
    btn.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            System.out.println("............开始打印..............");
            Printer printer = Printer.getDefaultPrinter();
            //设置打印纸张和打印样式(PageOrientation.LANDSCAPE:横版打印)
            PageLayout paper = printer.createPageLayout(Paper.A4, PageOrientation.LANDSCAPE, MarginType.DEFAULT);
            //创建打印任务
            PrinterJob job = PrinterJob.createPrinterJob();
            JobSettings jobSetting = null;
            if (job != null) {
                //调取打印页面
                Scene scene = new Scene(createContent3());
                //加载打印页面CSS样式
                scene.getStylesheets().add(getClass().getResource("application_print.css").toExternalForm());
                jobSetting = job.getJobSettings();
                jobSetting.setCopies("2");   //设置一次打印张数
                job.printPage(paper, createContent3());
                // job.printPage(createContent3());
                // job.printPage(getTableView());
                job.endJob();
                // 获取MAC地址
                InetAddress ia;
                try {
                    ia = InetAddress.getLocalHost();
                    String mac = IntenetTool.getLocalMac(ia);
                    // 向打印接口传递打印记录和当前机器的MAC地址作为唯一标识
                    String planDistDriver_uri = url + "print/updPlanDistStatus?code=" + code+"&macAddress="+mac;
                    //请求HTTP接口
                    com.erdos.thb.tools.HttpClient.gethttpResponse(planDistDriver_uri);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            primaryStage.close();
            new LoginController().start(primaryStage);
        }
    });
    return hbBtn;
}

项目源码

项目源码下载地址点击这里!

eclipse导出jar包(包含全部外包jar包)

eclipse导出jar包请看这里

使用exe4j打包Java程序

将jar包打包成exe程序看这里

转载于:https://my.oschina.net/qnloft/blog/995786

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值