`
linsl
  • 浏览: 70598 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

体验GroupLayout(jdk1.6)

阅读更多

 

原地址:http://www.blogjava.net/esls2008/archive/2006/12/18/88548.aspx

 

Java SE 6 中包含一个新的 GroupLayout ,从GroupLayout的单词意思来看,它是以Group(组)为单位来管理布局,也就是把多个组件(如:JLable、JButton)按区域划分到不同的Group(组),再根据各个Group(组)相对于水平轴(Horizontal)和垂直轴(Vertical)的排列方式来管理。下面我们针对这样一个界面看看它的用法:


首先划分组:

1、按水平(Horizontal)方向划分:

hpg1  : JLabel 所在组(只有一个组件可以不用分组)
hpg2a : 左边两个JCheckBox平行于水平轴(Horizontal)排列,构成一个ParallelGroup
hpg2b : 右边两个JChecKBox平行于水平轴(Horizontal)排列,构成一个ParallelGroup
hpg2H : hpg2a 和 hpg2b 两个组沿着水平轴(Horizontal)顺序排列,构成一个SequentialGroup
hpg2  :  JTextBox和组hpg2H 平行于水平轴(Horizontal)排列,构成一个ParallelGroup
hpg3  :  两个JTextBox平行于水平轴(Horizontal)排列,构成一个ParallelGroup

另外JLabel 、hpg2、hpg3 沿着水平轴(Horizontal)顺序排列,构成一个SequentialGroup


2、按垂直(Vertical)方向划分:


vpg1 : JLabel、JTextBox 、JButton(Find)平行于垂直轴(Vertical)排列,构成一个ParallelGroup
vpg2 : 上边两个JChecKBox、JButton(Cancel)平行于垂直轴(Vertical)排列,构成一个ParallelGroup
vpg3 : 下边两个JChecKBox平行于垂直轴(Vertical)排列,构成一个ParallelGroup

另外vpg1、vpg2、vpg3 三个组沿着垂直轴(Vertical)顺序排列,构成一个SequentialGroup

3、编码:水平和垂直两个方向我们都必须设定,实现方法详见程序。
addComponent:向Group里添加组件,如JLabel、JTextBox
addGroup    : 向Group里添加组

/// GLayout.java
package lee;

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

public class GLayout extends JFrame
{
   public GLayout()
   {
    super("Find");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //String laf = UIManager.getCrossPlatformLookAndFeelClassName();
    String laf = UIManager.getSystemLookAndFeelClassName();
    try {
         UIManager.setLookAndFeel(laf);
    } catch (UnsupportedLookAndFeelException exc) {
     System.err.println("Warning: UnsupportedLookAndFeel: " + laf);
    } catch (Exception exc) {
     System.err.println("Error loading " + laf + ": " + exc);
    }
    JLabel label1 = new JLabel("Find What:");
    JTextField textField1 = new JTextField();
    JCheckBox caseCheckBox = new JCheckBox("Match Case");
    JCheckBox wholeCheckBox = new JCheckBox("Whole Words");
    JCheckBox wrapCheckBox = new JCheckBox("Warp Around");
    JCheckBox backCheckBox = new JCheckBox("Search Backwards");
    JButton findButton = new JButton("Find");
    JButton cancelButton = new JButton("Cancel");
   
    Container c = getContentPane();
    GroupLayout layout = new GroupLayout(c);
    c.setLayout(layout);
   
    //自动设定组件、组之间的间隙
    layout.setAutoCreateGaps(true);
    layout.setAutoCreateContainerGaps(true);

  //LEADING -- 左对齐    BASELINE -- 底部对齐  CENTER -- 中心对齐
    GroupLayout.ParallelGroup hpg2a = layout.createParallelGroup(GroupLayout.Alignment.LEADING);
    hpg2a.addComponent(caseCheckBox);
    hpg2a.addComponent(wholeCheckBox);
    
    GroupLayout.ParallelGroup hpg2b = layout.createParallelGroup(GroupLayout.Alignment.LEADING);
    hpg2b.addComponent(wrapCheckBox);
    hpg2b.addComponent(backCheckBox);

    GroupLayout.SequentialGroup hpg2H = layout.createSequentialGroup();
    hpg2H.addGroup(hpg2a).addGroup(hpg2b);
  
    GroupLayout.ParallelGroup hpg2 = layout.createParallelGroup(GroupLayout.Alignment.LEADING);
    hpg2.addComponent(textField1);
    hpg2.addGroup(hpg2H);
  
    GroupLayout.ParallelGroup hpg3 = layout.createParallelGroup(GroupLayout.Alignment.LEADING);
    hpg3.addComponent(findButton);
    hpg3.addComponent(cancelButton);

  //水平
    layout.setHorizontalGroup(layout.createSequentialGroup()
        .addComponent(label1).addGroup(hpg2).addGroup(hpg3));   
   
    //设定两个Button在水平方向一样宽
    layout.linkSize(SwingConstants.HORIZONTAL,new Component[] { findButton, cancelButton });
    //layout.linkSize(SwingConstants.HORIZONTAL,new Component[] { caseCheckBox, wholeCheckBox, wrapCheckBox, backCheckBox});

    GroupLayout.ParallelGroup vpg1 = layout.createParallelGroup(GroupLayout.Alignment.BASELINE);
    vpg1.addComponent(label1);
    vpg1.addComponent(textField1);
    vpg1.addComponent(findButton);
   
    GroupLayout.ParallelGroup vpg2 = layout.createParallelGroup(GroupLayout.Alignment.CENTER);
    vpg2.addComponent(caseCheckBox);
    vpg2.addComponent(wrapCheckBox);
    vpg2.addComponent(cancelButton);

    GroupLayout.ParallelGroup vpg3 = layout.createParallelGroup(GroupLayout.Alignment.BASELINE);
    vpg3.addComponent(wholeCheckBox);
    vpg3.addComponent(backCheckBox);

//垂直
   layout.setVerticalGroup(layout.createSequentialGroup()
        .addGroup(vpg1).addGroup(vpg2).addGroup(vpg3));
    
    setLocation(200,200);
    pack();
    setVisible(true);
  }
  public static void main(String[] args)
 {
  new GLayout();
 }
}

分享到:
评论
1 楼 winter8 2010-06-01  
很牛逼呀,佩服!

相关推荐

    java多线程下载工具 论文

    一个简单多线程下载工具的设计与实现,论文+下载工具 程序中用到jdk1.6的GroupLayout布局。 论文格式规范,详细。非常适合作参考

    swt-grouplayout-pgroup

    swt-grouplayout-pgroup

    swt-grouplayout.jar

    swt-grouplayout.jar

    java swing-GroupLayout的使用

    GroupLayout 是 Java Swing 提供的一种布局管理器,用于设计复杂的图形用户界面(GUI)。 与其他布局管理器相比,GroupLayout 提供了更灵活和功能强大的布局方式。它允许开发者以逻辑组的形式来组织和控制组件的...

    GroupLayoutTest:搞乱 GroupLayout 设计

    组布局测试搞乱 GroupLayout 设计

    Java Swing GroupLayout分组布局的实现代码

    主要介绍了Java Swing GroupLayout分组布局的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    网页浏览器 java

    .addComponent(jTextFieldAddress, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout....

    Android登录UI界面

    利用GroupLayout配置登录XML

    Netbeans 卡片式窗口实例(CardLayout)

    Netbeans 卡片式窗口实例(CardLayout)

    javafx-group-layout:JavaFX 8 的 GroupLayout

    组布局面板 替换 JavaFX 中 Swing 的 。 需要 Java 8。 用法示例: GroupLayoutPane root = new GroupLayoutPane (); root . setPadding( new Insets ( 5 ))... StackPane n1 = new StackPane ();...n1 ....n2 ....n3 ....root ....

    TableLayout不显示列

    TableLayout 简单程序,但不常用的话容易忘记。特此发布,以备不时之需

    java绘制音频波形图

    使用jdk16编译 import java.awt.Graphics; import java.awt.GridLayout; import java.io.File; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sample...

    JAVA图形用户界面

    import javax.swing.GroupLayout.Alignment; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.LayoutStyle.ComponentPlacement; import javax.swing.JSeparator; import javax.swing...

    org.jdesktop.layout jar包,完整亲测

    org.jdesktop.layout jar包,完整亲测

    JAVA程序综合设计数据库设计说明.doc

    实验环境 XP操作传统、Eclipse开发环境和JDK6.0 3. 实验原理 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的...

    创建分层复选框(即复选框树)

    在复选框之间创建父子关系

    swing-layout-1.0.4.jar包

    swing-layout-1.0.4.jar是org.jdesktop.layout,org.jdesktop.layout.GroupLayout类的工具jar包

    Java电子相册管理系统源码.zip

    由于本程序采用的是Java swing编程,所以采用的是布局为:javax.swing.GroupLayout,即群组布局。 主要的工具包 该程序中用到如下几个工具包: java.applet java.awt java.io java.util javax.imageio javax.swing

    Java for Programmers

    * GUI, Graphics, GroupLayout, JDIC * Using the Debugger and the API Docs * And more… VISIT WWW.DEITEL.COM * For information on Deitel’s Dive Into Series corporate training courses offered at ...

    miglayout:适用于Swing,SWT和JavaFX的官方MiG布局

    迁移适用于Swing,SWT和JavaFX的官方MiG布局对于手工编写GUI布局的Java开发人员来说,他们希望简单,强大和每个... MigLayout创建为手动编码布局,而Matisse / GroupLayout则是IDE支持的可视布局。 有关文档,请参见

Global site tag (gtag.js) - Google Analytics