Java为图形用户界面(Grahi User Interface,GUI)提供的对象都保存在java Awt和javx.Swing两个包中,包内有相关的组件。GUI能够用图形的方式显示计算机操作界面,这样更加方便、直观。
AWT是抽象窗口工具包(Abstract Window Toolkit)的英文缩写。抽象窗口工具包为开发者提供了建立图形用户界面的工具集。其主要功能如下:
Swing的组件几乎都是轻量级的,与AWT组件不同的是,这些组件没有本地对等组件是由纯Java实现的,因此它们不依赖于操作系统。与AWT的重量级组件相比,Swing组件被称作轻量级组件。重量级组件是在本地的不透明窗体中绘制,而轻量级组件是在重量级组件的窗口中绘制。由于抛弃了基于本地对等组件的同位体体系结构,因此Swing不但在不同的平台上表现一致,而且还提供了本地组件不支持的特性。
AWT是Swing的基础,AWT最初的设计也只是定位于小应用程序的简单用户界面。
import javax.swing.JFrame;
public class HelloWorld {
public static void main(String[] args) {
JFrame f = new JFrame("第一个窗体");
f.setSize(400, 300);
f.setLocation(100, 200);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
一个图形界面制作完成后,要想让每一个组件都发挥自己的作用,就必须对所有的组件进行事件处理,才能实现软件与用户的交互。常用的事件有窗体事件、动作事件、焦点事件、鼠标事件和键盘事件。在Swing编程中,依然使用最早的AWT事件处理方式。
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class HelloWorld {
public static void main(String[] args) {
JFrame f = new JFrame("点击事件demo");
JLabel l = new JLabel("欢迎登录");
l.setHorizontalAlignment(JLabel.CENTER);
JButton b = new JButton("登录");
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
if (e.getActionCommand().equals("登录")) {
l.setText("已成功登录");
button.setText("退出");
} else {
l.setText("已安全退出");
button.setText("登录");
}
}
});
f.add(l);
f.add(b, BorderLayout.SOUTH);
f.setBounds(100, 100, 230, 120);
f.setVisible(true);
}
}
import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class HelloWorld {
public static void main(String[] args) {
JFrame f = new JFrame("点击事件demo");
JLabel l = new JLabel("欢迎登录");
l.setHorizontalAlignment(JLabel.CENTER);
JButton b = new JButton("登录");
b.addActionListener(e -> {
JButton button = (JButton) e.getSource();
if (e.getActionCommand().equals("登录")) {
l.setText("已成功登录");
button.setText("退出");
} else {
l.setText("已安全退出");
button.setText("登录");
}
});
JTextField t = new JTextField();
t.setBounds(20, 30, 100, 30);
t.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == 'q') {
System.exit(1);
}
}
});
f.add(t);
f.add(l);
f.add(b, BorderLayout.SOUTH);
f.setBounds(100, 100, 400, 300);
f.setVisible(true);
}
}