java 第六次课--图形用户界面概述

本文详细介绍了Java的图形用户界面(GUI),重点讲解了Swing组件和布局管理器。Swing提供平台无关的组件,如JFrame、JButton等,与AWT组件相比,Swing组件更丰富,支持更多的功能。文章通过代码示例展示了如何创建窗口、添加组件、使用FlowLayout、BorderLayout和GridLayout布局管理器。同时,还讨论了事件处理机制和组件分类,包括顶层容器、普通容器、特殊容器、基本控件等。
摘要由CSDN通过智能技术生成

Java图形用户界面概述

一、Java语言平台无关性组件的实现
图形用户界面是当今流行的操作系统界面。
Java语言为了适应发展趋势,也具有开发图形化的用户界面的功能。
Java语言自身的特点要求其图形用户界面具有平台无关性。

早期的Java版本JDK1.0和JDK1.1采用 的是AWT组件。特点是简单、易于理解。
AWT组件中采用了一种称为对等体(peer)的机制,每个组件都有一个对应的对等体,是用具体的操作系统平台的开发工具开发的,负责在AWT组件与本地平台之间进行交互。
同一个AWT组件在不同的平台上显示出不同的外观,种类不可能太多,这大大限制了Java语言程序的使用和推广。

Java 1.2版,图形用户界面功能被大幅度地扩展,形成了称为Java基础类库(Java Foundation Class,JFC)的一整套API集合,主要包括以下5个部分:
    ⑴抽象窗口工具;
    ⑵Swing图形界面类库;
    ⑶支持二维图形的类库(Java 2D);
    ⑷支持拖放的类库(Drag and Drop);
    ⑸支持易用性的类库(Accessibility)。
主要的部分是Swing图形界面类库。


窗体的建立
import java.awt.*;
public class exec
{
 public static void main(String args[])
 {
  Frame f=new Frame("This is a window!");
  f.setLocation(100,200);
  f.setSize(200,400);
  f.setBackground(Color.red);
  f.setVisible(true);
 }
}

组件的添加
import java.awt.*;
public class exec
{
 public static void main(String args[])
 {
  Frame f=new Frame("This is a window!");
  f.setLocation(100,200);
  f.setSize(200,400);
  f.setBackground(Color.red);
 
  Button b1=new Button("Ok!");
  f.add(b1);
 
  f.setVisible(true);
 }
}


Swing组件是用纯Java实现的,在不同的平台上其表现是一致的。Swing组件没有本地代码,不依赖于具体的本机操作系统的支持,并且还有能力提供本地系统不支持的其它特性,

这是它与AWT组件的最大区别。
Swing组件实现了平台无关的Java语言。
Swing组件是AWT组件的扩展,它提供了许多新的图形用户界面组件。

因为大部分AWT组件都在Swing组件中进行了重写,所以本章后面我们在介绍组件的时候将以Swing组件为主。
Swing组件的类以字母“J”开头,除了保留有与AWT类似的组件之外,又增加了丰富的高层组件。
Swing组件使用MVC体系结构,支持可存取性,支持使用图标(Icon)和边框,支持键盘操作,还可以让用户通过程序代码来设置不同的外观和感觉。

所谓外观和感觉(Look and Feel)是指程序与用户进行人机交互的方式及实现这种方式的界面。

把绑定在本地平台的组件称为重量级组件,把完全用Java编写的组件称为轻量级组件。
重量级组件包括所有的AWT组件和Swing组件中的JFrame、JApplet、JDialog、JWindow等四个顶层容器;轻量级组件包括除了上述四个顶层容器之外的所有的Swing组件。
重量级组件与平台相关,在不同的平台上可能有不同的外观;而轻量级组件与平台无关,外观不随平台变化。

学习swing
先看一个最为简单的窗体例子,如:
import javax.swing.*;
import java.awt.*;
public class exec
{
 public static void main(String args[])
 {
  JFrame f=new JFrame("This is a window!");
  f.setLocation(100,200);
  f.setSize(200,400);
 
  FlowLayout fl=new FlowLayout();
  f.getContentPane().setLayout(fl);
 
  JButton[] jb=new JButton[10];
 
  for(int i=0;i<jb.length;i++)
  {
   jb[i]=new JButton();
   jb[i].setText(String.valueOf(i));
   f.getContentPane().add(jb[i]);
  }
 
  f.setVisible(true);
 }
}


import javax.swing.*;
import java.awt.*;
public class exec
{
 public static void main(String [] args)
 {
  JFrame f=new JFrame("Hello!");
  f.setLocation(10,100);
  f.setSize(600,400);
 
  f.getContentPane().setLayout(new FlowLayout());
JButton jb = new JButton("Ok");
  f.getContentPane().add(jb);
f.setVisible(true);
 }
}


可以给按钮添加图片,如:
import javax.swing.*;
import java.awt.*;
public class exec
{
 public static void main(String [] args)
 {
  JFrame f=new JFrame("Hello!");
  f.setLocation(10,100);
  f.setSize(600,400);
 
  f.getContentPane().setLayout(new FlowLayout());
ImageIcon ii = new ImageIcon("e.gif");
  JButton jb = new JButton(ii);
  f.getContentPane().add(jb);
f.setVisible(true);
 }
}

 

 

二、GUI组件的类层次结构
在Java语言中,所有的组件都是以类的形式定义的。
AWT组件被放在java.awt包中,Swing组件被放在javax.swing包中。

java.lang.Object
  ├─ Font
  ├─ Color
  ├─ CheckboxGroup
  ├─ MenuComponent
  └─ Component

MenuComponent
   ├─ MenuBar
   └─ MenuItem
     ├─ Menu
     │  └─ PopupMenu
     └─ CheckboxMenuItem


Component
  ├─ Button, Canvas, Checkbox, Choice, Label, List
  ├─ TextComponent
  │     └─ TextArea, TextField
  └─ Container
     ├─ Panel
     │  └─ Applet──JApplet
     ├─ ScrollPane
     └─ Window──JWindow
        ├─ Frame──JFrame
        └─ Dialog──JDialog
           └─ FileDialog


轻量级组件的类层次如下所示
java.awt.Container
├─javax.swing.Box
└─javax.swing.JComponent
          ├─AbstractButton──接后面
          ├─JColorChooser
          ├─JComboBox
          ├─JFileChooser
          ├─JInternalFrame
          ├─JLabel
          ├─JLayeredPane──JDesktopPane
          ├─JList
          ├─JMenuBar
          ├─JOptionPane
          ├─JPanel
          ├─JPopupMenu
          ├─JProgressBar
          ├─JRootPane
          ├─JScrollBar
          ├─JScrollPane
          ├─JSeparator
          ├─JSlider
          ├─JSplitPane
          ├─JTabbedPane
          ├─JTable
          ├─JTextComponent──接后面
          ├─JToolBar
          ├─JToolTip
          ├─JTree
          └─JViewport


AbstractButton
 ├─JButton
 ├─JToggleButton─┬─JCheckBox
 │        └─JRadioButton
 └─JMenuItem──┬─JCheckBoxMenuItem
          ├─JMenu
          └─JRadioButtonMenuItem


JTextComponent
    ├─JEditorPane──JTextPane
    ├─JTextArea
    └─JTextField─┬─JFormattedTextField
        └─JPa

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值