下载了个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最后一个后就无组件显示了。