`
yunhaifeiwu
  • 浏览: 163912 次
  • 性别: 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 弹性布局的实现代码 Java Swing 是一个功能强大的 GUI 库,提供了多种布局管理器来组织组件的排列方式。其中,SpringLayout 是一种特殊的布局管理器,允许开发者以灵活的方式组织组件的...

    SWING图形界面开发手册.pdf

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

    2021-2022计算机二级等级考试试题及答案No.18782.docx

    - **SpringLayout**:弹簧布局,利用弹性模型自动调整组件的位置和大小。 ### 9. 设置标签控件字体大小 - **Font属性**:在编程中,设置标签控件字体大小通常需要设置其`Font`属性,而不是`Height`、`Width`或`...

    SQL入门指南:从零开始掌握数据库操作.pdf

    内容概要:本文档是一份详细的SQL入门指南,旨在帮助初学者全面掌握SQL的基本概念和技术。首先介绍了SQL的基础知识及其重要性,解释了为什么学习SQL对数据分析和软件开发至关重要。接着详细讲解了如何快速搭建SQL环境,包括在线沙箱和本地安装两种方式。随后深入探讨了SQL的基础语法,如创建数据库和表、插入、查询、更新和删除数据的操作。进一步解析了核心操作,如复杂的查询语句结构、多表关联查询以及实用的功能,如条件表达式、日期处理和字符串操作。最后提供了新手常见问题的解决方案和性能优化建议,并推荐了一些学习资源。 适合人群:对数据库操作感兴趣的初学者,尤其是希望从事数据分析或软件开发的人士。 使用场景及目标:适用于想要系统学习SQL基础知识和核心操作的个人,目标是在实践中掌握SQL技能,能够独立进行数据库管理和操作。 其他说明:文档不仅涵盖了理论知识,还提供了大量实例和练习建议,帮助读者更好地理解和应用所学内容。

    计算机二级考试C语言历年真题及答案.pdf

    计算机二级考试C语言历年真题及答案.pdf

    flink 自定义连接器

    flink 自定义连接器

    软考网络工程师视频教程及复习指导资料.zip

    软考网络工程师视频教程及复习指导资料,含视频教程、历年真题、模拟试题等。

    计算机二级access历年笔试真题及答案.pdf

    计算机二级access历年笔试真题及答案.pdf

    三菱PLC FX3U控制松下伺服的多轴联动解决方案:基于功能块的高效编程与调试

    内容概要:本文详细介绍了使用三菱PLC FX3U和1PG定位模块控制四个松下伺服电机的项目经验。项目将常用的JOG、HOME、定位等功能封装成独立的功能块(FB),并通过结构化文本(ST)编写程序。每个功能块不仅包含了核心逻辑,还进行了详细的异常处理和参数映射,确保系统的稳定性和易用性。此外,文章还涵盖了电气图纸、触摸屏配方管理以及硬件配置等方面的注意事项,提供了完整的项目实施指南。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对三菱PLC和松下伺服有一定了解的人群。 使用场景及目标:适用于需要高精度多轴联动控制的工业应用场景,如数控机床、机器人等。目标是帮助工程师快速搭建稳定的控制系统,减少调试时间和复杂度。 其他说明:文中提供的代码片段和硬件配置建议经过实际验证,能够有效提高项目的成功率。同时,文章强调了良好的注释习惯和详细的文档记录对于后续维护的重要性。

    办公室网安全监控uptime-kuma,docker镜像离线压缩包

    办公室网安全监控uptime-kuma,docker镜像离线压缩包

    教程-typescript-简介和入门

    教程-typescript-简介和入门

    S7-1200 PLC五轴伺服运动控制项目:结构化编程与功能实现详解

    内容概要:本文详细介绍了基于西门子S7-1200 PLC控制五轴伺服系统的项目实施经验,涵盖手动模式、自动运行状态机、伺服模式切换、断电保持以及报警处理等多个关键环节。作者通过结构化编程思想,将复杂的多轴控制系统分解为多个独立的功能块,确保系统稳定性和可扩展性。文中不仅展示了具体代码实现,还分享了许多实用技巧,如通过枚举类型构建状态机、利用保持存储器实现断电位置记忆、采用环形缓冲区记录报警信息等。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其对PLC编程和伺服控制有一定基础的人群。 使用场景及目标:适用于需要进行复杂多轴运动控制的工业应用场景,旨在提高系统的可靠性、灵活性和易维护性。通过学习本文,读者可以掌握如何运用结构化编程方法优化PLC程序设计,提升工作效率并减少错误发生。 其他说明:文章强调了良好的编程习惯对于大型工程项目的重要性,提倡模块化、组件化的设计理念。此外,还提到了一些常见的陷阱及其解决方案,帮助初学者避开弯路。

    win32汇编环境,网络编程入门之十五

    win32汇编环境,网络编程入门之十五

    12届嵌入式省赛题1111111

    12届嵌入式省赛题1111111

    Cadence两级放大电路版图设计与LVS/DRC验证的技术解析

    内容概要:本文详细记录了作者在Cadence平台中完成一个两级放大电路版图设计的过程,涵盖了从初步设计到最终通过LVS(Layout vs Schematic)和DRC(Design Rule Check)验证的所有步骤。文章首先介绍了电路的基本结构和参数设定,如共源放大器和共栅放大器的关键参数调整,以及在Virtuoso环境中进行的具体操作。接着,作者分享了在版图绘制过程中遇到的各种挑战及其解决方案,包括晶体管尺寸优化、走线布局、寄生参数控制、金属层间距调整等。此外,还特别强调了LVS和DRC验证中的常见问题及应对策略,如端口不匹配、器件参数偏差、金属密度规则等。最后,作者总结了一些实用的设计技巧和注意事项,为后续类似项目提供了宝贵的经验。 适合人群:从事集成电路设计的专业人士,尤其是对模拟电路版图设计感兴趣的工程师和技术爱好者。 使用场景及目标:帮助读者掌握Cadence环境下两级放大电路版图设计的方法,提高LVS和DRC验证的成功率,减少设计周期内的返工次数,提升设计效率。 其他说明:文中提到的具体数值和代码片段仅供参考,在实际应用中需要根据具体的工艺规则和个人需求进行适当调整。

    内江市乡镇边界,矢量边界,shp格式

    矢量边界,行政区域边界,精确到乡镇街道,可直接导入arcgis使用

    器件模型与参数提取工具,由中国科学院微电子研究所开源的针对后摩尔时代新型器件模型与参数提取工具matlab (2).zip

    matlab

    卒中风险预测数据集,脑中风预测数据集,包含影响中风风险的指标(包含16个特征和2个目标变量),适用于机器学习和数据分析

    这个Stroke Risk Prediction Dataset(卒中风险预测数据集)的版本2旨在通过症状、人口统计学和基于医学文献的风险模型来预测卒中风险。相比于版本1,它在多个方面进行了显著改进,包括年龄相关的症状概率、性别特异性风险调整以及经过医学验证的特征工程等。 主要增强点: 年龄准确的风险建模:卒中风险随着一个S型曲线增加,在50岁之后急剧上升,这反映了现实世界的流行病学趋势。 性别特定的风险:60岁以下的男性风险是女性的1.5倍,而60岁以上的女性(绝经后的激素变化)风险比同龄男性高1.8倍。 平衡且扩展的数据集:样本量从10,000增加到35,000,以提高模型的普遍性和捕捉罕见的症状组合。其中50%为卒中风险≥50%,另外50%为卒中风险<50%。 数据集结构 该数据集包含16个特征和2个目标变量(分类目标和回归目标),涉及年龄、性别、各种二元症状指标(如胸痛、呼吸急促、心律不齐等)、是否处于风险中(二元分类目标)以及卒中风险百分比(回归目标)。 医学有效性 数据集基于同行评审的医学文献构建,症状概率、风险权重及人口统计关系直接来源于临床指南和流行病学研究。例如,

    搭建环境:JDK-17

    搭建环境:JDK-17

    流程图111111111111111

    流程图111111111111111

Global site tag (gtag.js) - Google Analytics