JavaFX使用心得(重点:TextArea像控制台一样一行行输出)

JavaFX使用心得

参照这位老哥的 JavaFX 登录界面跳转的代码,我成功将 TextArea 搞出来控制台一样的效果了!!!
等不及的话,可以直接跳到第四部分~

一、概述

Java 好用是好用,但是图形界面真是永远的伤啊。awt、swing 我就不说了,新的时代得用新的东西嘛,所以我选择了 JavaFX。
第一次用难免遇见诸多问题,以下就是我亲身经历的坑,接下来我将依次分享他们,并提供解决的办法。

二、基础布局的设置

1.背景

找网上的 JavaFX 样例,你会发现一个网格状的登录界面。没错,就是它——
(此处应该有图片)
于是作为萌新的我就被坑了,心想这玩意也太不人性化了,连个按钮都没法调到恰好的位置(作为处女座的人,无法忍受下面两个按钮不是左右对称的)。后来,大佬告诉我,谁用 GridPane 做基础布局啊???GridPane 一般只用于局部构建~ emmm。。。行吧。(这点估计也就我这种没接触过 awt 和 swing 的萌新会出事吧= =)

2.解决方法

新建一个FXML

首先新建一个FXML。控制类可以先直接回车确认,这个可以以后再改。
(此处应该有图片)
可以看到,它以AnchorPane为基础。通过直接修改FXML的这个属性,可以更改根节点。建议将其修改为BorderPane。(AnchorPane是一个随意的布局,组件可以放在任何位置,可以设定该组件到上下左右四个边界的距离;BorderPane是一个传统的上下左右中五区域分割,非常适合做根节点)
其余的属性都可以用SceneBuilder可视化编辑

3.源码

QAQ

三、界面之间的切换

1.背景

界面如何切换?这是一个相当经典的问题了。看上去是界面变了,但是具体实现呢?是新开一个窗口显示,将原来的窗口隐藏,还是在原来的窗口中显示新的内容?这些都是需要考虑的。

2.解决方法

??

嘤嘤嘤(以后会补上哒)

3.源码

QAQ

四、有关TextArea的探究

1.背景

TextArea巨坑无比。其实也不能这么说吧,主要是 swing 主线程比较坑。swing主线程必须结束返回,才将内容刷新到TextArea中。一般情况下,如果内部处理过于复杂,耗时过长,将导致处理结束后,内容才一口气全部输出到TextArea的情况。这显然不是我们想要的效果。预想效果应该是,在界面a确认后,跳转到界面b,并且自动开始处理;同时,TextArea想控制台一样及时输出(一行行输出)。

2.解决方法

新开一个线程

嘤嘤嘤(以后会补上哒)

3.源码

注意:代码框架基于这位老哥的 JavaFX 登录界面跳转,下面只放出我和他不同的地方

FXMLTest.java修改

    public void gotoMain() {
        try {
            MainController main = (MainController) replaceSceneContent("FXML_MAIN.fxml");
            main.setApp(this);
            // 新开三个线程,用于测试,每个线程往TextArea不断输出十个数字
            new PrintThread(main).start();
            new PrintThread(main).start();
            new PrintThread(main).start();
        } catch (Exception e) {
            Logger.getLogger(FXMLTest.class.getName()).log(Level.SEVERE, null, e);
        }
    }

MainController.java新增

    @FXML
    TextArea textArea;

FXML_MAIN.fxml修改

(就是增加了一个TextArea,并且将其fx:id设为textArea。这样就可以使用它啦~)