首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > [Swing]布局管理器 - OverlayLayout
【标  题】:[Swing]布局管理器 - OverlayLayout
【关键字】:Swing,OverlayLayout
【来  源】:http://www.blogjava.net/leon/archive/2005/11/02/17885.html

[Swing]布局管理器 - OverlayLayout

OverlayLayout是用于排列重叠组件的布局管理器。它的用途是以一些对齐的点为基准将一些组件层叠的放置在布局容器中。

组件的横轴和纵轴的对齐点介于0.0和1.0之间。横轴(X轴)上0.0代表组件的左侧面,1.0代表组件的右侧面;纵轴(Y轴)上0.0和1.0分别代表组件的顶部和底部。

构造函数
public OverlayLayout(Container target)

因为构造函数不会为target对象安装结果布局管理器,所以我们还必须调用setLayout()来完成此功能。
JPanel p1 = new JPanel();
OverlayLayout overlay 
= new OverlayLayout(p1);
p1.setLayout(overlay); 

在OverlayLayout布局管理器中,每个组件都有一对横纵坐标值,每个组件的位置只和它本身的横纵坐标值有关,换句话说就是组件以他自己的位置作为基准,横轴上0.0和1.0分别代表组件的左侧面和右侧面;纵轴上0.0和1.0分别代表组件的顶部和底部,和容器位置无关。如果一个组件的alignmentX属性设置为0.5,原本左侧面的位置对应0.0,现在变成了0.5,那么,现在组件的位置就要向左移动width/2的距离,使左侧面的位置对应现在的0.0。纵轴亦是如此,明白了吗?

为了容易理解,我们来看《Java Swing》中关于OverlayLayout的一段样例程序,它可以编译运行。如图,你可以在输入框中调节容器中3个按钮的X,Y轴的值来看他们在容器中的位置是怎样改变的,多试几次,你就可以完全理解OverlayLayout。

OverlayTest.jpg
// OverlayTest.java
// A test of the OverlayLayout manager allowing experimentation.
//

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

public class OverlayTest extends JFrame {

    
public OverlayTest() {
        
super("OverlayLayout Test");
        setSize(
500300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        
final Container c = getContentPane();
        c.setLayout(
new GridBagLayout());

        
final JPanel p1 = new GridPanel();
        
final OverlayLayout overlay = new OverlayLayout(p1);
        p1.setLayout(overlay);

        
final JButton jb1 = new JButton("B1");
        
final JButton jb2 = new JButton("B2");
        
final JButton jb3 = new JButton("B3");

        Dimension b1 
= new Dimension(6050);
        Dimension b2 
= new Dimension(8040);
        Dimension b3 
= new Dimension(10060);

        jb1.setMinimumSize(b1);
        jb1.setMaximumSize(b1);
        jb1.setPreferredSize(b1);
        jb2.setMinimumSize(b2);
        jb2.setMaximumSize(b2);
        jb2.setPreferredSize(b2);
        jb3.setMinimumSize(b3);
        jb3.setMaximumSize(b3);
        jb3.setPreferredSize(b3);

        SimpleReporter reporter 
= new SimpleReporter();
        jb1.addActionListener(reporter);
        jb2.addActionListener(reporter);
        jb3.addActionListener(reporter);

        p1.add(jb1);
        p1.add(jb2);
        p1.add(jb3);

        JPanel p2 
= new JPanel();
        p2.setLayout(
new GridLayout(2,6));
        p2.add(
new JLabel("B1 X", JLabel.CENTER));
        p2.add(
new JLabel("B1 Y", JLabel.CENTER));
        p2.add(
new JLabel("B2 X", JLabel.CENTER));
        p2.add(
new JLabel("B2 Y", JLabel.CENTER));
        p2.add(
new JLabel("B3 X", JLabel.CENTER));
        p2.add(
new JLabel("B3 Y", JLabel.CENTER));
        p2.add(
new JLabel(""));

        
final JTextField x1 = new JTextField("0.0"4); // Button1 x alignment
        final JTextField y1 = new JTextField("0.0"4); // Button1 y alignment
        final JTextField x2 = new JTextField("0.0"4); 
        
final JTextField y2 = new JTextField("0.0"4); 
        
final JTextField x3 = new JTextField("0.0"4); 
        
final JTextField y3 = new JTextField("0.0"4); 

        p2.add(x1);
        p2.add(y1);
        p2.add(x2);
        p2.add(y2);
        p2.add(x3);
        p2.add(y3);


        GridBagConstraints constraints 
= new GridBagConstraints();
        c.add(p1, constraints);

        constraints.gridx 
= 1;
        JButton updateButton 
= new JButton("Update");
        updateButton.addActionListener(
new ActionListener() {
            
public void actionPerformed(ActionEvent ae) {
                jb1.setAlignmentX(
                    Float.valueOf(x1.getText().trim()).floatValue());
                jb1.setAlignmentY(
                    Float.valueOf(y1.getText().trim()).floatValue());
                jb2.setAlignmentX(
                    Float.valueOf(x2.getText().trim()).floatValue());
                jb2.setAlignmentY(
                    Float.valueOf(y2.getText().trim()).floatValue());
                jb3.setAlignmentX(
                    Float.valueOf(x3.getText().trim()).floatValue());
                jb3.setAlignmentY(
                    Float.valueOf(y3.getText().trim()).floatValue());

                p1.revalidate();
            }

        }
);
        c.add(updateButton, constraints);

        constraints.gridx 
= 0;
        constraints.gridy 
= 1;
        constraints.gridwidth 
= 2;
        c.add(p2, constraints);
    }


    
public static void main(String args[]) {
        OverlayTest ot 
= new OverlayTest();
        ot.setVisible(
true);
    }


    
public class SimpleReporter implements ActionListener {
        
public void actionPerformed(ActionEvent ae) {
            System.out.println(ae.getActionCommand());
        }

    }


    
public class GridPanel extends JPanel {
        
public void paint(Graphics g) {
            
super.paint(g);
            
int w = getSize().width;
            
int h = getSize().height;

            g.setColor(Color.red);
            g.drawRect(
0,0,w-1,h-1);
            g.drawLine(w
/2,0,w/2,h);
            g.drawLine(
0,h/2,w,h/2);
        }

    }

}



最后提醒,使用OverlayLayout布局管理器关键要记住X,Y轴对应组件位置,和容器没有关系。只要明白这一点,使用还是很简单方便的,我用OverlayLayout布局管理器clone了一个PhotoShop的工具面板。
ToolWidget.jpg
[全景]我的新窝:【上一篇】
[Image]将屏幕截图保存成图像文件:【下一篇】
【相关文章】
  • [java]Swing的春天
  • 研究起Swing来了
  • SWT?Swing?这是个问题
  • redhat 汉化 jdk安装,jdk swing中文显示 (版本0.2)
  • 使用多线程技术让你的Swing及时响应各类事件
  • 线程与Swing
  • Java开发中的线程安全选择与Swing
  • 分享Swing学习的一些经验
  • Merlin的魔力:Swing中的声音
  • 凡是用到swing包的程序不能编译-一个问题的解决
  • 【随机文章】
  • 读取exec返回值
  • 互联网名词解释
  • 山地车和公路车
  • Drcatd Multiple Buffer Overflows (Exploit)(1)
  • Flash MX 2004精彩特效
  • J2ME中文教程 9 MIDP 2 Push技术
  • 利用VB设计聊天室
  • dumprep 0 -u进程是否病毒?
  • CorelDRAW填色技巧图解
  • SQLServer2K5 remote login
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.