在用了一年的eclipse和myeclipse后,偶然在小学期课设中接触到了JetBrains 的 intelliJ ,如此便一发不可收拾地爱上了这一系列的IDE。刚好我也是web开发迷,其他几款如:webstorm和phpstorm正对我胃口。

闲话少说,在使用上intelliJ之后不久,终于遇到了需要画界面的需求。于是接触到了intelliJ的GUI Form

idea Flatten Packages如何出来 idea form_intellij


新建一个GUI Form :

idea Flatten Packages如何出来 idea form_Gui Form_02

注意勾选 create bound class ,意思就是 创建一个边界类,边界类干啥用的呢?

填好Form name,后点击OK(Class name自动填充和Form name相同的名字)

得到这样两个文件:

idea Flatten Packages如何出来 idea form_如何使用GUI Form_03

form文件根据官网的说法是这样的:

这是链接

idea Flatten Packages如何出来 idea form_java界面设计_04

也就是说form是一个基于XML的文件,这么设计的目的是为了摆脱复杂的Swing代码,intelliJ编译器会透明地自动生成必要的代码来创建和布局所有的控件。这样的设计封装得很彻底,好处和坏处都有。。。

然后接下来我们可以看到form的界面就是一个设计界面,和其他swing插件基本类似。

idea Flatten Packages如何出来 idea form_intellij_05

而边界类中什么都没有

idea Flatten Packages如何出来 idea form_swing_06

然而在form中创建的所有控件在更改了field name之后都会在边界类中创建相关属性(变量)

idea Flatten Packages如何出来 idea form_Gui Form_07

注意,所有的控件一定都要设定field name,否则在自动生成main函数时会出错!!!


添加几个控件之后:

idea Flatten Packages如何出来 idea form_Gui Form_08

idea Flatten Packages如何出来 idea form_java界面设计_09


OK,下面自动生成main函数

使用快捷键 alt+insert -> 或者右键在java类中单击->点击generate

然后点击最后一项

idea Flatten Packages如何出来 idea form_java界面设计_10

这是最后的代码:

import javax.swing.*;

public class NewForm {
    private JTextField textFieldA;
    private JPanel wrapPanel;
    private JLabel labelA;

    public static void main(String[] args) {
        JFrame frame = new JFrame("NewForm");
        frame.setContentPane(new NewForm().wrapPanel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

可以看出来,main函数中是新建了一个JFrame的

关注这一句:

frame.setContentPane(new NewForm().wrapPanel);



于是有点明白了,

为什么创建form时必然自动创建了一个panel,panel相当于根节点,当初始化这个类的时候,自动通过form文件中的内容装载了所有控件,并将根节点jpanel填充到新建的Jframe中显示出来就行了

在其他类中也可以引用这个jpanel,像这样:

JPanel pa = new NewForm().getWrapPanel();
                panelField.setLayout(new GridLayout());
                panelField.add(pa);
                panelField.validate();
                panelField.repaint();

当然,被引用类需要提供get方法。


以上就是一些基础的知识,具体使用、布局等参考Swing相关api吧。