交互式图形用户界面至少需要包括三种类型的对象:
- 组建(component)
- 时间(event)
- 监听器(listener)
GUI组件在上篇文章里基本介绍了一下。
事件是一个对象,一般代表了用户的动作,比如按下某键。大部分组件都会根据用户的动作产生相应事件。
监听器还是一个对象,它等待某个事件发生并作出某种反应。对于我们所关心的事件有必要编写监听器处理。
总的来说,使用GUI需要:
- 实例化并设置需要的组件。
- 实现监听器类,定义某种事件发生是程序该采取的动作。
- 建立监听器类于产生用户关心事件的组件之间的联系。
除了上面所说的外,一般,在我们的GUI设计之中最重要的就是使用布局管理器了,同样,布局管理器也是一个对象,负责在容器中安排组件,决定每个组件的大小和位置,当组件有变化时,布局管理器会根据自己的原则重排这些组件。
在JAVA标准类库中定义了几种布局管理器:
布局管理器 | 排列原则 |
Border | 将组件组织为五个区域:东西南北中 |
Box | 将组件组织为单独一行或一列 |
Card | 将组件按照区域组织,每次只有一个可见 |
Flow | 从左往右组织,有需要就加一行 |
Grid | 将组件组织到网格中 |
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程序都有一个顶层容器,顶层容器包含一个或多个其他容器,其他这些容器又能包含其他容器,这里面的每个容器都有自己的布局管理器。这里从顶层的容器向下就是一个层次结构树。当程序出现可能影响布局的变化时,会依次询问每个布局管理器来调整变化。
没有评论:
发表评论