在对这几个布局管理系统有了基本认识后,我们就一起来进入界面设计吧。在仔细观察了QQ游戏中“连连看”的设定后,我们可以发现,整个界面分为三个区,顶部是系统菜单区,占地面积最大的是用户游戏区,另外还有一个用户交互区,每个区域中都由若干控件组成。 这么多控件,我们从哪开始入手呢?由于容器控件中可以放置其他控件,因此,我们只需要先确定放置的容器控件就可以了。 既然已经知道需要使用容器控件的个数,接下来让我们就进入布局管理系统的选择。用GridLayout?似乎有点勉强,用FlowLayout?还有更好的选择吗?对了,我想你一定想到了是BorderLayout吧,如下图2所示。 动手之前,大家一定要注意的是,界面的设计要先考虑好尺寸,不管是主程序界面的大小还是每个区域的大小,如果没有设计好合适的尺寸,将来改动起来会十分痛苦。 下面便是相应的源程序: import java.awt.*; import javax.swing.*;
public class KyodaiUI extends JFrame { public KyodaiUI() { this.setSize(780, 500); //将窗体的大小设定为780*500 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); //窗体不能改变大小 this.setTitle("连连看"); //设置标题 JPanel toolBar = new JPanel(); toolBar.setBackground(Color.white); toolBar.setPreferredSize(new Dimension(780, 48));
JPanel actionPanel = new JPanel(); //新建JPanel型的控件 actionPanel.setBackground(Color.yellow); //设置背景色 actionPanel.setPreferredSize(new Dimension(160, 380)); //设置大小
JPanel contentPanel = new JPanel(); contentPanel.setBackground(Color.blue); contentPanel.setPreferredSize(new Dimension(620, 380)); this.getContentPane().add(toolBar, BorderLayout.NORTH); this.getContentPane().add(actionPanel, BorderLayout.EAST); this.getContentPane().add(contentPanel, BorderLayout.CENTER); }
public static void main(String[] args) throws HeadlessException { KyodaiUI kyodaiUI = new KyodaiUI(); kyodaiUI.show(); } } 让我们来看看上面这段程序是如何运行的。首先,extends JFrame表明了这是从JFrame中继承过来的,JFrame是最基本的顶层容器控件。实际上,在JDK中,以字母J打头的控件都是Swing控件。然后设置了容器的属性,其中,setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)是用来告诉Java虚拟机,当用户点击窗体右上角的“关闭”按钮时,关闭该窗口进程。如果不这么做的话,你会发现虽然你可以点将窗口关闭,然而程序却没有退出。在接下来的代码中,我们为顶层容器添加了三个Panel容器。要注意的是,在AWT中,我们可以直接写为add(toolBar, BorderLayout.NORTH) ,而在 Swing 中却一定要写成getContentPane(). add(toolBar, BorderLayout.NORTH) ,否则程序就会出错。 现在大家可以放在编译运行看看,是不是和我的运行结果一样(见图3)? 4.边框 虽然我们使用了不同前景色来区别不同的区域,然而却没有层次感,加上边框一定会漂亮许多。 在Java中,所有以J打头的Swing控件都可以使用setBorder方法来为自己设置边框。边框有很多种,线型、凸起、凹下、空的,你甚至可以自由组合形成个人风格。所有的Border都必须使用javax.swing.BorderFactory中提供的静态方法来创建,比如: Border border = BorderFactory.createBevelBorder(BevelBorder.LOWERED, new Color(45, 92, 162), new Color(43, 66, 97), new Color(45, 92, 162), new Color(84, 123, 200)); |