2008-07-19

java图形设计章节.交互式GUI基础

交互式图形用户界面至少需要包括三种类型的对象:

  • 组建(component)
  • 时间(event)
  • 监听器(listener)

  GUI组件在上篇文章里基本介绍了一下。
  事件是一个对象,一般代表了用户的动作,比如按下某键。大部分组件都会根据用户的动作产生相应事件。
  监听器还是一个对象,它等待某个事件发生并作出某种反应。对于我们所关心的事件有必要编写监听器处理。
  总的来说,使用GUI需要:
  • 实例化并设置需要的组件。
  • 实现监听器类,定义某种事件发生是程序该采取的动作。
  • 建立监听器类于产生用户关心事件的组件之间的联系。
基本上说,一个基于GUI来处理用户事件的程序可以称为“事件驱动”基本上只要对它的核心有所了解,剩下的只是查文档的工作了。 
 

  除了上面所说的外,一般,在我们的GUI设计之中最重要的就是使用布局管理器了,同样,布局管理器也是一个对象,负责在容器中安排组件,决定每个组件的大小和位置,当组件有变化时,布局管理器会根据自己的原则重排这些组件。
  在JAVA标准类库中定义了几种布局管理器:

布局管理器
排列原则
Border
将组件组织为五个区域:东西南北中
Box
将组件组织为单独一行或一列
Card
将组件按照区域组织,每次只有一个可见
Flow
从左往右组织,有需要就加一行
Grid
将组件组织到网格中

  一般可以调用容器的setLayout方法改变容器的布局管理器,只需要从下面简单的代码中就能够亲身体会到它们的不同了。注意这里用了一个标签窗格,这个东西就是Windows下我的电脑的属性里面上面一排标签实现的效果。

MainDemo.java:
import javax.swing.*;

public class MainDemo
{
  public static void main (String[] args)
  {
  JFrame frame = new JFrame("Demo for Layout");
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  JTabbedPane tabp = new JTabbedPane();
  tabp.addTab("Flow", new FlowPanel());
  tabp.addTab("Box", new BoxPanel());
  tabp.addTab("Grid", new GridPanel());
  tabp.addTab("Border",new BorderPanel() );

  frame.getContentPane().add(tabp);
  frame.pack();
  frame.setVisible(true);

  }

}

FlowPanel.java:

import java.awt.*;
import javax.swing.*;

public class FlowPanel extends JPanel
{
  public FlowPanel()
  {
    setLayout(new FlowLayout());

    setBackground(Color.BLACK);

    JButton FLOW1 = new JButton("BUTTON 1");
    JButton FLOW2 = new JButton("BUTTON 2");
    JButton FLOW3 = new JButton("BUTTON 3");
    JButton FLOW4 = new JButton("BUTTON 4");
    JButton FLOW5 = new JButton("BUTTON 5");

    add(FLOW1);
    add(FLOW2);
    add(FLOW3);
    add(FLOW4);
    add(FLOW5);

  }
}

  其他几个文件内容和FlowPanel.java基本相同,发挥你的创造力自己写出来吧。
  实际上,这些东西用NetBeans或者其他IDE都可以十分简单的生成出来。不过,因为这几篇文章目的在于对GUI有一定的基础了解,所以有必要稍微花点时间。
  最后,关于容器有一个设计上的知识就是容器的层次结构。基本上,任何一个Java程序都有一个顶层容器,顶层容器包含一个或多个其他容器,其他这些容器又能包含其他容器,这里面的每个容器都有自己的布局管理器。这里从顶层的容器向下就是一个层次结构树。当程序出现可能影响布局的变化时,会依次询问每个布局管理器来调整变化。

没有评论: