某日周五,心血来潮,想搞一个个人工作记录薄的可视化小插件工具试试,想起以前学Java时好像接触过Swing,但是基本也忘了差不多了,工具也换成了IDE,所以只能就着度娘慢慢摸索了。现在记录下过程,避免之后继续采坑。

一、创建Grandle项目

java 怎么在idea 中 可视化编程 idea实现swing可视化_jar

这一步不同版本的IDE可能展示不一样,但是也都是创建项目的常规配置,按照自己的需要配置即可。

java 怎么在idea 中 可视化编程 idea实现swing可视化_Swing_02

新建完成后,可能会有一段较长的载入时间,在右下角的processes running可以看出其实是载入Grandle项目的一些基础配置,等待完成后再进行操作。

java 怎么在idea 中 可视化编程 idea实现swing可视化_Java_03

全部载入完成后,查看项目结构如下图,至此完成Grandle项目创建。

java 怎么在idea 中 可视化编程 idea实现swing可视化_Swing_04

二、引入GUI Form画图表

java 怎么在idea 中 可视化编程 idea实现swing可视化_Java_05

创建自己的项目,基础布局我还没深入研究,暂且就用默认的,确认后跳转到编辑页面。

java 怎么在idea 中 可视化编程 idea实现swing可视化_Swing_06

java 怎么在idea 中 可视化编程 idea实现swing可视化_Swing_07

先不管同名的Java类,在绘制图表时暂时用不到,先关注.form文件。这个form我点开查看过,本质上有点像xml文件,里面保存了各个组件的配置信息。而且需要注意,如果直接复制这个form文件,再创建同名的java类,并不会自动转意成gui的绘制页面,也许有啥方法但是我还没找到(我估计是,右键Mark as GUI Designer form,因为重新打开后就这转的),所以小心操作为妙。

绘制时需要注意:

1、给每个field name赋值,尤其是JPanel,在后面java类的创建会用到,而其他的组件之后如果要写功能,肯定也会用到。有点像前端的id或name。

2、注意JPanel的边框设置,默认是0,会显得很丑。

3、选择组件,按F4可以查看对应的Java对象,其实此时看也没啥作用。

4、画图时需要自己感受每个组件的作用,特别是活用HSpacer和VSpacer,很有用。

5、下拉框JComboBox是以回车作为分隔

java 怎么在idea 中 可视化编程 idea实现swing可视化_jar_08

三、页面画完,准备执行程序。

我们右击查看效果可以看出功能已经显示成功了,但是如何在Java方法中执行呢?

在Java类中选择JPanel对象,右击选择Generate或者Alt+insert唤起菜单,选择Form main(),会自动生成基础代码。

java 怎么在idea 中 可视化编程 idea实现swing可视化_Swing_09

生成的代码如图:

java 怎么在idea 中 可视化编程 idea实现swing可视化_Swing_10

其中JFrame的名称应该适合JPanel的对象的field name一致。

接下来就是运行程序了,网上有很多教程到这边就说可以直接运行了。但是我尝试了很多遍还是会报Exception in thread "main" java.awt.IllegalComponentStateException: contentPane cannot be set to null.这样的一个错误:

java 怎么在idea 中 可视化编程 idea实现swing可视化_Java_11

说是我没有设置contentPane对象,实际上也就是找不到对应form对象。我也是一头雾水,各种找答案。

1、直接用filed name就行了,不用创建对象,即直接frame.setContentPane(MainTip),但现实是编译都不能通过。

2、修改项目生成方式,File->Setting->Editor->GUI Designer,改Generate GUI into为Java Source code,然后重新编译项目,但是我试了没啥用。

3、在第2步的基础上,增加forms_rt.jar的关联,如图,修改build.gradle文件,增加依赖。为了配置版本,我把forms_rt.jar备份了一个重命名为forms_rt-13.1.1.jar,然后build,理论上来说应该会在IDE和Gradle中同时build但是实际上并没有起效,而且按照该配置会在java类中生成的代码也没有生成。

java 怎么在idea 中 可视化编程 idea实现swing可视化_Swing_12

java 怎么在idea 中 可视化编程 idea实现swing可视化_Swing_13

4、最后在stackoverflow的一个评论中找到了解决方案:我IDE用的是2019.3,不知道是不是由于版本的原因,按照第3种方式并不会变成Java source code,正确的做法如下:

File->Setting->Build,Execution,Deployment->Build Tools->Gradle->Build and run using

改成IntlliJ IDEA即可,其他改动都不需要。

java 怎么在idea 中 可视化编程 idea实现swing可视化_jar_14

确定后,会发现在Java类中自动生成了运行代码$$$setupUI$$$()和$$$getRootComponent$$$()方法,如下图:

java 怎么在idea 中 可视化编程 idea实现swing可视化_jar_15

再次运行main方法,效果如下:

java 怎么在idea 中 可视化编程 idea实现swing可视化_jar_16

只能说现在用Swing来写程序的人寥寥无几,网上的答案比较杂而且复制粘贴的较多,想做一个功能也是挺费时间的。暂时基本框架搭建到这里,之后有时间看看怎么往里面加功能。(纯属心血来潮,不知道能不能做完Orz)