`
yunhaifeiwu
  • 浏览: 161295 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

SpringLayout 弹性布局实例

阅读更多


本例展示了,  左边为标签、右边为文本框的三组,当窗口变化时,其中的文本框跟着变化。
变化前:




变化后:





import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.Spring;
import javax.swing.SpringLayout;



/**
 * 演示SpringLayout布局管理器的使用。例子,演示有三组由左为表签、右为文本框)的组件<br/>
 * 将随着窗口宽度变化 而相应变化。
 * 特别说明:当用putConstraint函数设定组件,且对宽与高都不要求随窗口变化时,则会<br/>
 * 遇着一些问题。怀疑是Bug。如果要让宽或高 要随窗口变化而变化时,最好用用容器的<br/>
 * add方法.把组件及对该组件的"Spring.constraint"约束添加进去。<br/>
 * 其约束的设定,是从与相邻组件的四个方向进行设置。另外如果水平有两个及两个以的组件<br>
 * 的宽度都要随父容器变化而时,每个文本框的右边约束建议按父容器的宽度的百分比进行设定。
 * 
 * @author cloud
 */
public class SpringDemo1 {
    public static void main(String args[]) {
        JFrame frame = new JFrame("SpringLayout");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container contentPane = frame.getContentPane();

        SpringLayout layout = new SpringLayout();
        contentPane.setLayout(layout);

        JLabel  lbl3 = new JLabel("Left3");
        JTextField txt3 = new JTextField("text3");
        
        JLabel  lbl4 = new JLabel("Left4");
        JTextField txt4 = new JTextField("text4");
        
        JLabel  lbl5 = new JLabel("Left5");
        JTextField txt5 = new JTextField("text5");

  
        contentPane.add(lbl3);
        contentPane.add(lbl4);
        contentPane.add(lbl5);
        contentPane.add(txt3);
        contentPane.add(txt4);
        contentPane.add(txt5);
        
        //得到父容器当前最右边(东方)的宽度,并除以2. 目的让两组各占一半窗口宽度。
        Spring rightC=layout.getConstraint (SpringLayout.EAST, contentPane);
        Spring rightC1=Spring.scale(rightC, 0.3f);
        Spring rightC2=Spring.scale(rightC, 0.6f);
        
        // 让lbl3标签上边与父容器的上边相距20。即第一个标签 上边距为20
        layout.putConstraint(SpringLayout.NORTH, lbl3, 20, 
                SpringLayout.NORTH, contentPane);
        //让lbl3标签的左边与父容器的左边相距10。即第一个标签左边间隔为10
        layout.putConstraint(SpringLayout.WEST, lbl3, 10, 
                SpringLayout.WEST, contentPane); 
        
        //获得一个约束对象,以便对组件的四个方向的间隔进行设置。这个约束设定后好
        //将由父容器的add方法,把该约束与要束的组件一起添加进去,从而完成组件间隔设置
        SpringLayout.Constraints constraint = new SpringLayout.Constraints();  
        //设定约束上边间距为20
        constraint.setConstraint(SpringLayout.NORTH, Spring.constant(20));        
        //得lbl3标签右边的约束,并增加间隔10
        Spring pad=Spring.sum(
                layout.getConstraint(SpringLayout.EAST, lbl3), 
                Spring.constant(10)
                );          
        //设左边的约束为lbl3约束,并间隔10.即设与lbl3标签的水平间隔为10
        constraint.setConstraint(SpringLayout.WEST, pad);     
        //设右边的约束为30%。
        constraint.setConstraint(SpringLayout.EAST, rightC1); 
        //把txt3按前面设好的约束,添加到父容器中。
        contentPane.add(txt3, constraint);
        
        //让lbl4标签上边与父容器的上边相距20。即第二个标签 上边距为20
        layout.putConstraint(SpringLayout.NORTH, lbl4, 20, 
                SpringLayout.NORTH, contentPane);  
        //让lbl4标签左边与txt3的左边相距20。即第一个标签左边与第一组间隔30
        layout.putConstraint(SpringLayout.WEST, lbl4, 30,
                SpringLayout.EAST, txt3);
        
        //获得一个约束对象,以便对组件的四个方向的间隔进行设置。这个约束设定后好
        //将由父容器的add方法,把该约束与要束的组件一起添加进去,从而完成组件间隔设置
        constraint = new SpringLayout.Constraints();  
        //设定约束上边间距为20
        constraint.setConstraint(SpringLayout.NORTH, Spring.constant(20));        
        //得lbl4标签右边的约束,并增加间隔10
        pad=Spring.sum(
                layout.getConstraint(SpringLayout.EAST, lbl4), 
                Spring.constant(10)
                );          
        //设左边的约束为lbl4约束,并间隔10.即设与lbl4标签的水平间隔为10
        constraint.setConstraint(SpringLayout.WEST, pad);     
        //设右边的约束为父容器右边的60%,并增加10.
        constraint.setConstraint(SpringLayout.EAST,
                Spring.sum( rightC2,Spring.constant(10))
                ); 
        //把txt4按前面设好的约束,添加到父容器中。
        contentPane.add(txt4, constraint);
        
        //设lbl5的上边距为20
        layout.putConstraint(SpringLayout.NORTH, lbl5, 20, 
                SpringLayout.NORTH, contentPane);  
        //设lbl5的左边与txt4的右边相隔30,即lbl5与txt4的水平间隔为30
        layout.putConstraint(SpringLayout.WEST, lbl5, 30,
                SpringLayout.EAST, txt4);
   
        //获得一个约束对象,以便对组件的四个方向的间隔进行设置。这个约束设定后好
        //将由父容器的add方法,把该约束与要束的组件一起添加进去,从而完成组件间隔设置
        constraint = new SpringLayout.Constraints();  
        //设定约束上边间距为20
        constraint.setConstraint(SpringLayout.NORTH, Spring.constant(20));        
        //得lbl5标签右边的约束,并增加间隔10
        pad=Spring.sum(
                layout.getConstraint(SpringLayout.EAST, lbl5), 
                Spring.constant(10)
                );          
        //设左边的约束为lbl5约束,并间隔10.即设与lbl5标签的水平间隔为10
        constraint.setConstraint(SpringLayout.WEST, pad);     
        //设右边的约束为容器的右边约束并减去20,即设成与父容器右边间隔为20.
        constraint.setConstraint(SpringLayout.EAST,
                Spring.sum(rightC, Spring.constant(-10))
                ); 
        //把txt5按前面设好的约束,添加到父容器中。
        contentPane.add(txt5, constraint);
        

        frame.setSize(300,100);
        frame.setVisible(true);
    }
        

}

  • 大小: 8.1 KB
  • 大小: 13.8 KB
分享到:
评论

相关推荐

    Java Swing SpringLayout弹性布局的实现代码

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

    Android代码-Spring Layout Sample

    SpringLayout - RelativeLayout on steroids. The goal of this project is to create more reliable and feature-rich replacement for RelativeLayout. Apart from new features SpringLayout has better error ...

    javaSE代码实例

    第一篇 起步篇 第1章 初识Java 3 1.1 Java简介 3 1.1.1 Java的不同平台 3 1.1.2 Java发展的历程 3 1.1.3 Java的特点 4 1.2 安装开发工具包 5 1.2.1 下载JDK 5 1.2.2 安装JDK 6 ...

    SWING图形界面开发手册.pdf

    1.1: FlowLayo1.1: FlowLayo1.1: FlowLayo1.1: FlowLayo1.1: FlowLayo 1.1: FlowLayo 1.1: FlowLayout (流式布局) (流式布局) (流式布局) (流式布局) ................................ ......................

    java GUI code

    Java GUI Code编程 基于图像界面,内容:AWT swing Border BoxLayout Calculator Checkbox CircleLayout ColorChooser ComboBox ...Menu Option Radio Slider Splinner SpringLayout TextArea TextEdit Text ToolBar

    Java Swing 第三版 英文

    ·SDK 1.4引入的新布局管理器SpringLayout ·总结每个组件重要功能的属性列表 ·SDK 1.4的微调按钮(Spinner)组件 ·如何在组件中使用HTML ·新增列出所有组件绑定操作的一个附录 ·新增一个支持网站,包含工具程序...

    Hippopotam Java Presentation Layer-开源

    简化了Java Swing表示层的编程创建。 包含GUI组件,绑定框架,本地化,输入验证和许多实用程序。 新的!!! 用于视觉布局组件的Hippopotam Designer使用GridBagLayout(计划的SpringLayout)。

    Xml Java Gui Builder-开源

    Xml Java Gui Builder是使用SpringLayout和运行时xml文件的swing组件构建器。

    Java教程补充材料

    SpringLayout 21 Networking Using Datagram Protocol 22 Creating Internal Frames 23 Pluggable Look and Feel 24 UML Graphical Notations 25 Testing Classes Using JUnit 26 JNI (example provided by ...

Global site tag (gtag.js) - Google Analytics