在用了一年的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吧。