图形用户界面的设计
使用网袋布局管理器进行布局的步骤如下:
创建一个GridBagLayout类型的对象 把此GridBagLayout对象设成组件的布局管理器 创建一个GridBagConstraints类型的对象 对于每一个组件,填充GridBagConstraints对象
约束 gridx,gridy,gridwidth,gridheight参数 gridx,gridy值定义了添加组件左上角的行和列 位置。而gridwidth,gridheight值指定了组件占 用的行数和列数 增量字段(weightx,weighty) 设置单元格增量的最大值 fill,anchor参数 fill有4个有效值:GridBagConstraints.NONE,
JPanel(LayoutManager m) 为面板设置布局管理器
显示几个按钮,以窗体下方对齐。
示例
Container contentPane = getContentPane(); JPanel panel = new JPanel(); JButton yellowButton = new JButton("yellow"); JButton blueButton = new JButton("blue"); JButton redButton = new JButton("red"); panel.add(yellowButton); panel.add(blueButton); panel.add(redButton);
参数:side
SprinLayout类的 WEST,EAST,NORTH,SOUTH常量之一
s
被设置的弹簧
static Spring constant(int preferred) 用给定的首选值构造一个支柱.最小和最大值被设置为首选值
static Spring constant(int minimum,int preferred,int maximum) 用给定的最小值,首选值和最大值构造一个弹簧 static Spring sum(Spring s,Spring t) 返回弹簧s和t的和 static Spring max(Spring s,Spring t) 返回弹簧s和t的最大值 static Spring minus(Spring s) 返回弹簧s的相反值 int getMinimumValue() int getPreferredvalue() int getMaximumvalue() 返回弹簧的最小值,首选值和最大值 int getValue() void setValue(int newValue) 得到或者设置弹簧的值 例子: (SpringDemo.java)
弹簧布局
SprintLayout.Constraints getConstraints(Component c)
得到给定组件的约束
参数:c
该布局管理器管理的组件或者容器之一
void putConstraint(String endSide,Component end,Sprint s,String startSide,Component Start)
例子:
package src; import java.awt.*; import javax.swing.*;
public class GridBagDemo extends JFrame {
JLabel face,size; JComboBox comboface,combosize; JCheckBox bold,italic; JTextArea text; public GridBagDemo() {
第七讲 图形用户界面的设计与实现
布局管理器
回忆前面的程序,向一个面板中加了三件 按钮,所有的按钮都是排成一行。
如果加更多,直到一行排不了,分行。 按钮总是居中显示。 实际上,是有一个布局管理器在背后起
作用。 只要是容器都可以更改布局。
FlowLayout流式布局
上例中的JPanel就是。 Java.awt.Container
panel.setLayout(new GridLayout(5,4)); 添加组件,从第一行的第一列开始,然后是 第一行的第二列,并这样持续下去。
网袋布局
网袋布局是所有的布局管理器中最强大的一种。 在一个网袋布局中,行和列的尺寸均可改变, 并且可以合并相邻的单元格来适应更大的组件。 组件不需要填充整个单元格区域,并且可以指 定单元格内的对齐方式。
新的BorderLayout。
参数:hgap 水平间距(以像素为单位,如果为负,则强 制进行重叠)
vgap 垂直间距(以像素为单位,如果为负,则强 制进行重叠)
BorderLayout
经常将面板和BorderLayout合在一起用。 面板如同界面元素的小容器,并且在局面管理
器的控制之下,它们自己能够排列在一个更大 的面板中。例如,你可以把一个面板放在南边 用于容纳按钮,而另一个面板放在中部用于显 示文本
BorderLayout
1. Void add(Component c,Object Constraints)
把一个组件添加到容器中。
参数:c
添加的组件
constrrLayout(int hgap,int vgap)
根据指定的组件水平和垂直间距来构造一个
bold = new JCheckBox("Bold:"); c.ipady = 30; c.gridx = 1; c.gridy = 2; c.gridheight = 1; c.anchor = GridBagConstraints.CENTER; gridbag.setConstraints(bold,c); contentPane.add(bold);
void putConstraint(String endSide,Component end,int pad,String startSide,Componet start)
设置end组件给定的边为一个弹簧,该弹簧是这样得到的:通过添
加弹簧s,或者有pad尺寸的支柱到一个弹簧,此弹簧从end容器的
。。。 Container contentPane = getContentPane();
contentPane.add(panel,BorderLayout.SOUTH);
网格布局管理器
网格布局按行列来排列所有的组件,就像电 子数据表一样。然而,对于网格布局。各个 单元总是一样的大小。 例如:设定行列数
Spring getWidth()
Spring getHeight() 返回跨越约束组件宽度或者高度的弹簧
Spring getConstraint(String side)
void setConstraint(String edge,Spring s) 得到或者设置从容器开始处到达约束组件给定边界的弹簧
setLayout(LayoutManger m) Java.awt.FlowLayout
FlowLayout(int align) 新的流式布局
align-可选LEFT(左),CENTER(中),RIGHT(右)
FlowLayout(int aligh,int hgap,int vgap)
hgap-水平间隙(负值强制相互重叠) vgap-重直
face = new JLabel("Face:"); c.gridx = 0; c.gridy = 0; gridbag.setConstraints(face,c); contentPane.add(face);
comboface = new JComboBox(); comboface.addItem("Serif"); c.gridx = 1; c.gridy = 0; c.ipadx = 60; c.fill = GridBagConstraints.BOTH; gridbag.setConstraints(comboface,c); contentPane.add(comboface);
size = new JLabel("Size:"); c.ipadx = 0; c.ipady = 0; c.gridx = 0; c.gridy = 1; gridbag.setConstraints(size,c); contentPane.add(size);
combosize = new JComboBox(); combosize.addItem("18"); c.ipadx = 60; c.gridx = 1; c.gridy = 1; c.fill = GridBagConstraints.BOTH; gridbag.setConstraints(combosize,c); contentPane.add(combosize);
BorderLayout 边框布局
North West Center East
South
BorderLayout
这是每个JFrame的内容窗格的默认布局 管理器。它和流布局管理器完全控制每 个组件的位置不同,边界布局管理器让 你选择每个组件的摆放位置。你可以选 择把组件放在内容窗格的中部、北部、 南部、东部或者西部。
复杂的布局管理
箱式布局
italic = new JCheckBox("Italic"); c.gridx = 1; c.gridy = 3; gridbag.setConstraints(italic,c); contentPane.add(italic);
text = new JTextArea(); text.setLineWrap(true); JScrollPane scroll = new JScrollPane(text); c.ipadx = 0; c.gridx = 2; c.gridy = 0; c.gridheight = 4; c.gridwidth = 1; gridbag.setConstraints(scroll,c); contentPane.add(scroll); pack(); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new GridBagDemo(); } }