java-弹簧布局(自适应窗口)

一、布局管理器

  • 弹簧布局管理器以容器和组件的边缘为操作对象,通过组件与容器边缘以及组件与组件边缘建立约束(建立位置关系),实现对组件的布局管理。
  • 主要通过函数putConstraint(Strting s1,Component c1,int len,Strting s2,Component c2);当s2在s1的北方或西方时,len为正数,当s2在s1的南方或东方时,len为负数。
参数说明
s1需要参考的组件(需要布局的组件)对象的具体需要参考的边
c1需要参考的组件(需要布局的组件)对象
s2被参考的组件对象的具体需要参考的边
c2被参考的组件对象或组件所属的容器对象
len两条边之间的距离,即两对象的某个边缘的间隔
  • 弹簧布局方式界面的布局会根据窗口大小的拉伸进行调整,但是组件的相对位置不会改变。
  • 通过这种方式,在水平方向或垂直方向上的任意两条边之间都可以建立约束,以实现组件的自适应变化。
  • 组件的大小受其文本大小的影响,有时可能或破坏布局,这可以调整文本长度来适应或直接设置组件大小,使布局更美观。

 

二、用法及效果

                                                 

  • 我们所有的组件都放在窗口容器中,先设置界面的布局方式,以及创建一个容器。
        SpringLayout springLayout = new SpringLayout();//使用弹簧布局管理器Container contentPane = getContentPane();      //创建一个容器contentPane.setLayout(springLayout);           //设置布局方式
  • "随机生成"按钮的放置:按钮的北部与容器的北部距离x,以及按钮的西部以容器的西部距离y,则设置如下,这种设置按钮的调整受两条边约束
JButton c1= new JButton("随机生成");//按钮定义及其布局位置设置//位置约束,c1,contentPane分别为按钮对象和容器对象
springLayout.putConstraint(SpringLayout.NORTH, c1, x, SpringLayout.SOUTH, contentPane);             
springLayout.putConstraint(SpringLayout.WEST,  c1, y, SpringLayout.WEST,  contentPane);
  • "同时开始"按钮的放置:按钮的北部与文字标签的南部距离x,以及按钮的东部以容器的东部距离y(容器在按钮的东部,所以代码中需要设置距离为负数),则设置如下,这种设置,按钮的调整受两条边约束,当窗口大小改变时,按钮位置发生改变,当是其相对位置不变。
//按钮定义及其布局位置设置
JButton c1 = new JButton("同时开始");//lab为JLabel lab = new JLabel("请单击按钮生成20000个0~100000的整数.")对象
springLayout.putConstraint(SpringLayout.NORTH, c1, x, SpringLayout.SOUTH, lab);
springLayout.putConstraint(SpringLayout.EAST, c1, -y, SpringLayout.EAST, contentPane);
  • 对于中间的文本框,需要设置三个方向的约束:
//需要布局的编辑框edit,e为其北部编辑框,距离x,t为其西部文本标签,距离y,c为容器,距离z
springLayout.putConstraint(SpringLayout.NORTH, edit, x, SpringLayout.SOUTH, e);
springLayout.putConstraint(SpringLayout.WEST, edit, y, SpringLayout.EAST, t);
springLayout.putConstraint(SpringLayout.EAST, edit, -z, SpringLayout.EAST,c);

三、按钮事件绑定

SpringLayout springLayout = new SpringLayout();
Container contentPane = getContentPane();
contentPane.setLayout(springLayout);//按钮定义及其布局位置设置
JButton start= new JButton("随机生成");
contentPane.add(start);
springLayout.putConstraint(SpringLayout.NORTH, start, 10, SpringLayout.NORTH, contentPane);
springLayout.putConstraint(SpringLayout.WEST, start, 10, SpringLayout.WEST, contentPane);//为按钮绑定响应事件
start.addActionListener(new ActionListener() 
{public void actionPerformed(ActionEvent e) {for (int i = 0; i < 20000; i++) {Array[i] = (int) (Math.random() * 100000);}lab.setText("成功生成20000个0~100000的整数.");}
});

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从1G到5G,从回顾过去到展望未来

来源&#xff1a;《从1G到5G&#xff1a;移动通信如何改变世界》 作者&#xff1a;王建宙始于20世纪80年代的蜂窝式移动通信&#xff0c;只用了30多年的时间&#xff0c;就实现了在全世界的普及。如今&#xff0c;手机是人们随身携带的使用频率最高的工具。手机改变了人类的沟…

重磅:国拨概算5.34亿!“新一代人工智能”重大项目项目申报指南发布

来源&#xff1a;brainnews各省、自治区、直辖市及计划单列市科技厅&#xff08;委、局&#xff09;&#xff0c;新疆生产建设兵团科技局&#xff0c;国务院各有关部门&#xff0c;各有关单位&#xff1a;为落实国务院印发的《新一代人工智能发展规划》总体部署&#xff0c;现根…

Idea中在代码顶部添加自定义作者和时间

一、在工具栏找到File>settings>Editor>File and Code Templates 二、选择右边的File Header,在编辑框中添加自定义信息&#xff0c;例如&#xff1a; 三、然后点击应用&#xff0c;保存就OK啦&#xff01; 转载于:https://www.cnblogs.com/HelloBigTable/p/10261145.…

MFC框架解析

通过上述方法&#xff0c;我们进行代码的编写&#xff0c;创建一个空项目&#xff0c;我们要编写MFC应有程序&#xff0c;因此设置项目的属性&#xff0c; 项目->属性->链接器->系统->子系统为&#xff1a;窗口 (/SUBSYSTEM:WINDOWS)&#xff0c;项目->属性-&g…

162年难题,黎曼猜想被印度数学家迎刃而解?克雷数研所发出质疑

来源 &#xff1a; 新智元黎曼猜想又被证明了&#xff1f;5年前&#xff0c;印度一名数学物理学家Kumar Easwaran声称自己证明了「黎曼猜想」&#xff01;他发表了一篇论文「The Final and Exhaustive Proof of the Riemann Hypothesis from First Principles」解释自己的发现&…

MFC的六大关键技术

//main.h头文件 #pragma once #include"a.h" class CShape { public:virtual CRuntimeClassTest* GetRuntimeClassTest() const;BOOL IsKindOf(const CRuntimeClassTest* pClass) const; public:static CRuntimeClassTest classCShape; };static char szCShape[] &q…

20210709未来智能实验室收录资料

整理&#xff1a;未来智能实验室1.加州理工博士&#xff1a;用概率模型解析大脑中的神经活动2.智能化战争的基本形态 3.联合全域指挥控制的人工智能生态系统| 新品推荐4.数字化转型白皮书&#xff1a;数智技术驱动智能制造&#xff0c;42页pdf5.2021综述论文《几何深…

HTTP的请求报文与响应报文

报文&#xff1a; 简单来说&#xff0c;报文就是也就是HTTP报文&#xff0c;作用是在各个系统之间进行和响应时用来交换与传输的数据单元&#xff0c;即站点一次性要发送的数据块&#xff0c;这些数据块以一些文本形式的元信息开头&#xff0c;这些信息描述了报文的内容及含义&…

MFC关键技术-动态创建

//a.h头文件 #pragma once #include"m.h" #include<iostream> using namespace std;class CShape;//类声明//RTTI结构体 struct CRuntimeClassTest {LPCSTR m_lpszClassName;int m_nObjectSize;UINT m_wSchema;CShape*(PASCAL*m_pfnCreateShape)();//PASCAL宏为…

谷歌利用人工智能设计的芯片揭示了智能的本质

来源&#xff1a;TechTalks 网站作者&#xff1a;Ben Dickson译者&#xff1a;Sambodhi策划&#xff1a;刘燕InfoQ 中文站曾经翻译并分享过《谷歌的深度学习在 AI 芯片中找到了一条关键路径》&#xff0c;该文介绍了 ZDNet 与谷歌大脑总监 Jeff Dean 谈到谷歌如何使用人工智能来…

MFC关键技术-永久保存机制

//Main.h文件 #pragma once #include<afxwin.h>class CEllipse :public CObject {DECLARE_SERIAL(CEllipse)private:double m_point; public:CEllipse(){}void Serialize(CArchive&); };//Main.cpp文件 #include"main.h"IMPLEMENT_SERIAL(CEllipse, CObjec…

2021世界人工智能大会最高奖项——卓越人工智能引领者奖(Super AI Leader,简称SAIL奖)在大会开幕式揭晓...

来源&#xff1a;AIII研究院备受全球人工智能界关注的2021世界人工智能大会最高奖项——卓越人工智能引领者奖&#xff08;Super AI Leader&#xff0c;简称SAIL奖&#xff09;今天在大会开幕式揭晓。获得2021 SAIL奖的是——利物浦大学机器人科学家、中科院上海微系统所免开颅…

2021年,深度学习还有哪些未饱和、有潜力且处于上升期的研究方向?

来自&#xff1a;知乎 作者&#xff1a;谢凌曦、数据误码率、Zhifeng编辑&#xff1a;极市平台 在目前的深度学习领域&#xff0c;有些研究方向已经较为成熟&#xff0c;实现新突破的难度与过去相比显著提升。那么就目前来看&#xff0c;还有哪些方向处于朝阳阶段&#xff0c;相…

浙江发布数字化改革标准化体系建设方案,将于2025年底建成

来源&#xff1a;中新网近日&#xff0c;记者从浙江省市场监管局获悉&#xff0c;《浙江省数字化改革标准化体系建设方案(2021-2025年)》(以下简称《方案》)已正式印发&#xff0c;该《方案》为浙江省数字化改革标准化体系建设工作明确了总体框架、分阶段目标、重点任务和相关保…

MFC基于对话框的商场交易软件实现

void CHomeViewDlg::OnClickedBtGuke() {// TODO: 在此添加控件通知处理程序代码CUserLoginDlg dlg;//注册窗框口类对象User user;user.m_UserType _T("顾客");dlg.SetUser(user);dlg.DoModal();//进入注册窗口窗口 }void CHomeViewDlg::OnClickedBtShangjia() {// …

GPU的发展历程、未来趋势及研制实践

来源&#xff1a;文章转载自期刊《微纳电子与智能制造》&#xff0c;作者&#xff1a;熊庭刚摘要凭借GPU强大的计算能力&#xff0c;超级计算机在数据处理、物理模拟、天气预测、现代制药、基因测序、先进制造、人工智能、密码分析等方面都有着广泛的应用。在2020年的新冠肺炎疫…

Mysql Explain的简单使用

Mysql Explain 主要重要的字段有上面红色方框圈出来的那几个。 type: 连接类型&#xff0c;一个好的SQL语句至少要达到range级别&#xff0c;杜绝出现all级别。key: 使用到的索引名&#xff0c;如果没有选择索引&#xff0c;值是NULL。可以采取强制索引方式。key_len: 索引长度…