UI 组件简介
在开始学习 Swing 之前,必须回答针对真正初学者的一个问题:什么是 UI?初学者的答案是“用户界面”。但是因为本教程的目标是要保证您不再只是个初学者,所以我们需要比这个定义更高级的定义。
所以,我再次提出这个问题:什么是 UI?您可能把它定义成您按下的按钮、打字的地址栏 、打开和关闭的窗口,等等,这些都是 UI 的元素,但是除了在屏幕上看到的这些之外,还有更多都是 UI 元素。比如鼠标、键盘、音量、屏幕颜色、使用的字体,以及一个对象相对于另一个对象的位置,这些都包含在 UI 之中。实际上,在计算机和用户的交互之中扮演角色的任何对象都是 UI 的组成部分。这看起来足够简单,但是您应当惊讶的是,有许多人和大型公司已经为它努力了很多年。实际上,现在有的大学专业的惟一课程就是研究这种交互。
Swing是一个用于开发Java应用程序用户界面的开发工具包。它为Java提供了一个可视化的交互界面,使得程序可以脱离控制台运行。
现在我们来看一下Swing包中的具体内容
JFrame:代表一个界面的窗口,也就是一个程序的门面,我们在创建图形化界面的时候必须要首先创建这个窗口
JLabel:这是一个标签组件,仅仅用于显示文字,图像等内容。这是Swing最简单的一个组件。
JBtton:这是按钮组件,我们可以为其添加事件。
JTextField:这是一个单行文本框,用于接收输入的文本
JPasswordField:这是一个密码文本框
Jpanel:这是一个面板组件,相当于一个小容器
接下来我们通过一个简单的“HelloWorld”代码来看一下Java Swing的模样
package swing;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
public class HelloWorldSwing {
/**{
* 创建并显示GUI。出于线程安全的考虑,
* 这个方法在事件调用线程中调用。
*/
private static JFrame frame;
private static JLabel label;
private static void createAndShowGUI() {
// 创建及设置窗口
frame = new JFrame("HelloWorldSwing");
//创建容器
Container c=frame.getContentPane();
// 添加 "Hello World" 标签
label = new JLabel("Hello World");
//设置标签居中显示
label.setHorizontalAlignment(SwingConstants.CENTER);
c.add(label);
// 显示窗口
frame.setSize(500,500);
frame.setVisible(true);
}
public static void main(String[] args) {
createAndShowGUI();
}
}
上述代码可以看到,我们首先实例化了一个窗口,然后通过getContentPane()方法得到了一个Container类
我们应该有这样一个概念,Swing组件的窗口通常与组件和容器有关,所以在JFrame窗口对象创建完成后,我们需要调用getContentPane()方法将窗口转换成一个容器,然后在容器中添加各种组件并且设置布局。如果需要将组件添加至容器,我们可以使用Container类中的add()方法进行添加。
例如上述代码的:
c.add(label);
这段代码我们就是通过add()方法将我们的label组件添加到容器中去。
其实这个Swing无非就是将一个个组件添加到容器中去,设置组件的属性(对齐方式啊,颜色啊,大小啊),为组件添加响应事件(按了这个按钮会怎样,离开这个文本框会怎样等等),设置布局管理器(就是设置各个组件的排列方式)。
接下来我们修改上面的程序,我们为程序添加一个按钮,按下这个按钮之后,界面显示的文字我们让他变成“你好,世界”
public class HelloWorldSwing {
/**{
* 创建并显示GUI。出于线程安全的考虑,
* 这个方法在事件调用线程中调用。
*/
private static JFrame frame;
private static JLabel label;
private static JPanel jp1;
private static JPanel jp2;
private static Button change;
private static void createAndShowGUI() {
// 创建及设置窗口
frame = new JFrame("Hello World");
Container c=frame.getContentPane();
// 添加 "Hello World" 标签
label = new JLabel("Hello World");
//实例化按钮组件
change=new Button("change");
//为按钮添加响应时间
change.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
//改变标签中的文字
label.setText("你好,世界");
}
});
//设置居中显示
label.setHorizontalAlignment(SwingConstants.CENTER);
//实例化面板
jp1=new JPanel();
jp2=new JPanel();
//向面板中添加内容
jp1.add(label);
jp2.add(change);
//向容器中添加内容
c.add(BorderLayout.NORTH,jp1);
c.add(BorderLayout.SOUTH,jp2);
// 显示窗口
frame.setSize(500,500);
frame.setVisible(true);
}
public static void main(String[] args) {
createAndShowGUI();
}
}
我们可以看到,在上述代码中我们新添加了两个JPanel面板,这是为了将“标签”和“按钮”分离开,然后我们创建了一个按钮组件,为其添加了一个监听事件,事件的内容就是改变标签中的文字,接下来我们将“标签”和“按钮”分别添加入两个面板中,将面板按照“BorderLayout”的布局方式添加到容器中
再次强调一遍
Swing无非就是将一个个组件添加到容器中去,设置组件的属性(对齐方式啊,颜色啊,大小啊),为组件添加响应事件(按了这个按钮会怎样,离开这个文本框会怎样等等),设置布局管理器(就是设置各个组件的排列方式)。
Ok,有了这个概念之后我们就可以愉快的去学习Swing了