下載了個Vim,想把它掌握,沒想到卡在編譯這一塊了。
Chapter 11 Getting Started With GUI Programming
1. GUI 組件
JButton JLabel JTextField JCheckBox JRadioButton JComboBox 都屬于Swing組件,大多數swing組件通過java代碼直接在畫板上作圖,獨立于運行平臺,稱為輕量級(lightweight)組件;而其它swing組件(一般是java.awt.Window和java.awt.Panel的子類),必須通過在特定的平臺使用本地的GUI,稱為重量級(heavyweight)組件。
2. 容器 Container 類
容器用于放置各種組件。Window Panel Applet Frame Dialog 都是AWT的容器類,Swing組件有Component Container JFrame JDialog JApplet JDialog
3. GUI Helper類
用來描述GUI組件的屬性,如Graphics Color Font FontMetrics Dimension LayoutManager
java.awt包中沒有helper類
4. 窗口
(1)JFrame 類
常用方法
JFrame()
JFrame(String title)
setSize(int, int)
setVisible(boolean) (默認為不可見)
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) (否則關閉窗口后程序并不停止)
(2)加入、移除組件
用frame.getContentPane()獲得窗口的container
container.add(Component) 加入組件
container.remove(Component) 移除組件
(3)使窗口居中
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int screenWidth = screenSize.width;
int screenHeight = screenSize.height;
然后即可計算窗口左上角點的坐標,使用setLocation(int, int)設置位置
5. Layout 版面管理
很多其他窗口系統中,用戶界面組件通常是通過坐標絕對定位的,僅此一般只能在固定的平臺中運行,而Java的版面管理可以在所有窗口系統中自動排版。
開發界面時比較好的一個風格:創建一個繼承JFrame的類,main方法創建該類的實例并設置具體屬性。
三個基本的layout manager:
(1)FlowLayout
container.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 20));
從左到右逐個放入組件,一行放滿了就放下一行,可以通過三種方式對齊組件,可以以象素為單位調整組件間距。
組件的大小是固定的,窗口不夠大的話就看不到了。
(2)GridLayout
public GridLayout(int rows, int columns, int hGap, int vGap)
public GridLayout(int rows, int columns)
public GridLayout()
把組件放入一個n*m的方陣,每個組件的大小根據窗口大小縮放。其中rows或columns之一可以為0(不能都為0),為0的那一個在運行時由layout manager根據組件數動態決定。而如果rows和columns都非0,則columns被忽略,在運行時由layout manager動態決定。
(3)BorderLayout
public BorderLayout(int hGap, int vGap)
public BorderLayout()
把窗口分為上下左右中五塊區域,其中上下塊可以左右延伸,左右塊可以上下延伸,中間的可以任意延伸。
加入組件:
container.add(new JButton("East"), BorderLayout.EAST);
container.add(new JButton("South"), BorderLayout.SOUTH);
container.add(new JButton("North"), BorderLayout.NORTH);
container.add(new JButton("West"), BorderLayout.WEST);
container.add(new JButton("Center"), BorderLayout.CENTER);
其中最后一句(中間位置)也可以簡寫成container.add(new JButton("Center"));
如果加入了多個組件,則僅顯示最后一個,而且remove最后一個后就無組件顯示了。