幸运时时彩app计划

我爱土豆丝352 / 电脑与程序 / JavaFx 终于不再难写了

0 0

   

JavaFx 终于不再难写了

2020-03-25  我爱土豆...

1. 令人抓狂的avaFX

幸运时时彩app计划 在很多情况下,我们为了实现一个可视化界面不得不使用Java,例如我们想要做一个小工具或者想要做一个软件分享出去,这个时候对于Java选手来说为了做一个小工具特地学一门设计界面友好的语言实在是不切实际,可是如果使用Java,AWT已经无人问津,而Swing又总是用起来不顺手,而JavaFX虽然在出生那一刻就已经是被时代淘汰的技术了,但是它的真实实力却不被许多人了解,JavaFX是一把大刀,但是想要用好这把大刀可不容易。

2. JavaFX-Plus 为简单而生

2.1 第一个JavaFX-Plus程序

2.1.1 设置启动器类

@FXScan(base = {'cn.edu.scau.biubiusuisui.example'}) //启动扫描//项目目录中带有中文字符会导致无法启动public class Demo extends Application { @Override public void start(Stage primaryStage) throws Exception { FXPlusApplication.start(Demo.class); //启动 }}

2.1.2 设置控制器类

@FXController(path = 'Main.fxml')@FXWindow(title = 'hello world')public class Main2 extends FXBaseController {   @FXML   Label label;}

幸运时时彩app计划2.1.3 即可启动

2.2 页面元素绑定

<fx:root id='haha' prefHeight='403.0' prefWidth='625.0' type='Pane' xmlns='http://javafx.com/javafx/8.0.171' xmlns:fx='http://javafx.com/fxml/1' fx:controller='cn.edu.scau.biubiusuisui.example.MainController'> <children> <Label fx:id='label' layoutX='18.0' layoutY='166.0' prefHeight='68.0' prefWidth='304.0' text='${input.text}'> <font> //绑定了textField的控件的输入值 <Font size='20.0' /> </font> </Label> <TextField fx:id='input' layoutX='316.0' layoutY='185.0' prefHeight='30.0' prefWidth='277.0' /> </children></fx:root>

2.4 普通Bean也支持绑定

一般我们写的JavaBean都是基本类型的,但是JavaFXBean的设计哲学是这些属性都应该是JavaFX定义的Property类型,这十分不利于我们的开发,我们如何在不修改JavaBean的条件下,使用到JavaFX的Property的一些优良方法呢?答案是我们通过反射获得基本类型对应的Property(目前仅限于boolean,double,integer,long,string,float等基本类型,不支持List等封装对象。)

幸运时时彩app计划而本次设计的过程中希望尽量避免操作界面相关的Property等方法,而是直接操作JavaBean类。例如下面代码。

@FXController(path = 'Main.fxml')@FXWindow(title = 'demo1')public class MainController extends FXBaseController{    @FXML    Button btn;    @FXML    Label label;    Student student;    int count = 1;    @Override    public void initialize() {        student = (Student) FXEntityFactory.getInstance().createJavaBeanProxy(Student.class); //工厂产生一个学生        student.setName('Jack'); //设置学生姓名        FXEntityProxy fxEntityProxy = FXPlusContext.getProryByBeanObject(student); //获取学生代理        Property nameProperty = fxEntityProxy.getPropertyByFieldName('name'); //获取Bean对应的Property        //可以通过fxEntityProxy.getPropertyByFieldName('list'); 获得List的Property        label.textProperty().bind(nameProperty); //属性绑定    }    @FXML    @FXSender    public String send(){        student.setName('Jack :' + count); //操作会自动反应到界面上,无需再手动操作界面元素,专心业务部分。        count++;        return 'sending msg';    }}@FXEntitypublic class Student {    @FXField    private String name; //标记这个类要生成property对象    private int age;    private  String gender;    private  String code;    @FXField    private List<String> list = new ArrayList<>(); //标记这个List要生成Property对象    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getGender() {        return gender;    }    public void setGender(String gender) {        this.gender = gender;    }    public String getCode() {        return code;    }    public void setCode(String code) {        this.code = code;    }    public void addList(String word){        list.add(word);    }    public void delList(String word){        list.remove(word);    }}

效果图如下:

3. 消息机制

有两个主要标签一个是FXSender,这个标签作用在方法上,标记这个方法为信号发射方法。可以通过设置name修改这个信号发射方法的名称,默认是函数名字。

发射信号会被订阅这个发射函数的所有FXReceiver接收,并且发射函数的返回值会作为参数传进这个函数之中。而且这种发送和接受关系是全局的,只要是注册了的Controller都可以进行接受,不局限于同一个Controller。

我们通过一个简单的代码来理解一下。

@FXController(path = 'Main.fxml')@FXWindow(title = 'demo1')public class MainController extends FXBaseController{ @FXML Button btn; @FXML Label label; /** 鼠标之后,系统通过会发射信号,调用所有订阅这个发射信号函数的方法响应信号 */ @FXML //绑定鼠标点击事件 @FXSender //标注为信号发射函数 public String send(){ System.out.println('before sending'); //输出 before sending return 'sending msg'; } /** 接受者必须指定要订阅的发送者类名+方法名 而且发送函数的返回值会注入到接受函数的参数中 */ @FXReceiver(name = 'MainController:send') public void read(String msg){ System.out.println('read ' + msg); //输出 read sending msg }}

4. 模块化

在JavaFX-Plus世界中,所有的一切都是Pane,一切都可以封装成一个单独的控件,并且可以在Scenebuilder中拖拉使用。只要新建一个类继承自FXBaseController,而FXBaseController是继承于Pane,这就是JavaFX-Plus的设计思想之一切皆为Pane。在类上标上FXController注解,提供FXML文件的地址。这样就变为了一个组件了,界面我们到Scenebuilder中进行设计该FXML文件。

5. 总结

这是JavaFX-Plus的主要功能,具体详细内容可以到仓库查看

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    幸运时时彩app计划

    猜你喜欢

    0条评论

    发表幸运时时彩app计划

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多