Graphical user interface (GUI)图形用户界面
AWT Abstract Window Toolkit 抽象窗口工具集,第一代的JAVA GUI组件,是重量级的Swing 不依赖于底层细节,轻量级的组件,是第二代的JAVA GUI组件,下面来详细介绍Swing
1. Swing:
•是第二代GUI开发工具
•它建立在AWT之上,但用新版本的组件替代了旧版本的组件。
•它提供了许多新的组件和相关的API
2. The Swing API 发布在:
–JDK1.2
–JFC1.1 (for use with JDK1.1)
3.The Swing API 功能是强大的,灵活的和广泛的。例如JFC 1.1 有15 public packages。
我们经常用的有两个包:
–javax.swing
–javax.swing.event
一、概览
SwingApplication 创建了四个常用的Swing components:
•a frame, or main window (JFrame)
•a panel (JPanel)
•a button (JButton)
•a label (JLabel)
二、 Swing Components 分类
•顶层容器
•中间容器
•原子组件
三、顶层容器
顶层容器
java 提供了三个顶层容器:JFrame, JDialog, 和JApplet。
顶层容器
特点:
•显示在屏幕上的每个组件都必须在一个包含继承中。每一个包含继承都有一个顶层容器作为它的根。
•每一个顶层容器都有一个content pane,它包含了顶层容器中的所有组件
•菜单在顶层容器中,但在content pane 之外。
四、JFrame
JFrame
是一个带有标题和可变大小边框的窗口。
任何一个图形界面应用程序都必须至少有一个JFrame.
下面是代码示例:
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class FrameDemo
{
/**
* @param args
*/
public static void main(String[] args)
{
JFrame frame=new JFrame("JFrame Demo");
JLabel label=new JLabel("label");
frame.addWindowListener(new MyHandler());
frame.getContentPane().add(label,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
class MyHandler extends WindowAdapter
{
@Override
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
五、JDialog
JDialog是一个对话框,当你要弹出对话框的时候使用这个组件,由于这个组件比较简单,所以不举例说明。
六、JPanel
JPanel
•为其它组件提供一个容器。便于组织和显示组件。
•还可以包含子JPanel
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class FrameWithJPanel extends JFrame
{
public FrameWithJPanel(String title)
{
super(title);
}
public static void main(String[] args)
{
FrameWithJPanel frame=new FrameWithJPanel("second gui");
JPanel panel=new JPanel();
frame.setSize(300,200);
frame.setBackground(Color.blue);
frame.setLayout(null);
panel.setSize(100,100);
panel.setBackground(Color.red);
frame.add(panel);
frame.setVisible(true);
}
}
七、创建菜单
步骤:
1.创建一个MenuBar 对象, 将其加入一个菜单容器,例如:Frame .
2.创建一个或多个Menu 对象,将其加入menu bar 对象.
3.创建一个或多个MenuItem objects,对象,将其加入相应的menu object.
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class MenuTest
{
/**
* @param args
*/
public static void main(String[] args)
{
JFrame frame=new JFrame("MenuTest");
JMenuBar mb=new JMenuBar();
JMenu m1=new JMenu("File");
JMenu m2=new JMenu("save");
JMenu m3=new JMenu("load");
JMenu m4=new JMenu("quit");
JMenuItem j1=new JMenuItem("hello");
JMenuItem j2=new JMenuItem("hello");
JMenuItem j3=new JMenuItem("hello");
JMenuItem j4=new JMenuItem("hello");
frame.setJMenuBar(mb);
mb.add(m1);
mb.add(m2);
mb.add(m3);
mb.add(m4);
m1.add(j1);
m1.add(j2);
m1.add(j3);
m1.add(j4);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(200,300));
frame.setVisible(true);
}
}
八、JComponent Class
JComponent Class
JComponent Class API:
它从Componentand Container继承了许多方法,同时也提供了一些新的方法。它为它的继承者提供了如下常用功能:
•Customizing Component Appearance
•Setting Component State
•Handling Events
•Painting Components
•Dealing with the Containment Hierarchy
•Laying Out Components
•Getting Size and Position Information
•Specifying Absolute Size and Position