在用了一年的eclipse和myeclipse后,偶然在小学期课设中接触到了JetBrains 的 intelliJ ,如此便一发不可收拾地爱上了这一系列的IDE。刚好我也是web开发迷,其他几款如:webstorm和phpstorm正对我胃口。
闲话少说,在使用上intelliJ之后不久,终于遇到了需要画界面的需求。于是接触到了intelliJ的GUI Form
新建一个GUI Form :
注意勾选 create bound class ,意思就是 创建一个边界类,边界类干啥用的呢?
填好Form name,后点击OK(Class name自动填充和Form name相同的名字)
得到这样两个文件:
form文件根据官网的说法是这样的:
这是链接
也就是说form是一个基于XML的文件,这么设计的目的是为了摆脱复杂的Swing代码,intelliJ编译器会透明地自动生成必要的代码来创建和布局所有的控件。这样的设计封装得很彻底,好处和坏处都有。。。
然后接下来我们可以看到form的界面就是一个设计界面,和其他swing插件基本类似。
而边界类中什么都没有
然而在form中创建的所有控件在更改了field name之后都会在边界类中创建相关属性(变量)
注意,所有的控件一定都要设定field name,否则在自动生成main函数时会出错!!!
添加几个控件之后:
OK,下面自动生成main函数
使用快捷键 alt+insert -> 或者右键在java类中单击->点击generate
然后点击最后一项
这是最后的代码:
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吧。