布局管理器
第9章 布局管理器

第9章 布局管理器在第5章中,介绍了多种常用AWT 组件的使用,AWT 组件可用于用户图形界面的创建,但由于界面中不能使用绝对坐标,因此组件无法直接定位,必须使用布局管理器。
布局管理器可控制整个图形界面的空间布局,并严格限定其中各组件的相对位置,即使在不同的平台上运行,也能保证图形界面中组件排布的合理性,保证了组件的平台无关性。
Java 提供的布局管理器类型很多,它们分别采用不同的布局策略。
在默认状态下,各种容器组件都没有默认的布局管理器,如Panel 组件使用默认的FlowLayout 布局管理器,JPanel 组件则使用默认的BorderLayout 布局管理器,这种情况同样适用于容器组件的嵌套。
使用这些功能强大的布局管理器,用户可以很方便地设计出实用、美观的图形界面。
9.1 布局管理器一般传统的图形界面中,大都采用(x ,y )坐标方式,且大小及位置均需由设计者制定。
但这种方法的缺点就是在不同环境下(如不同的分辨率:由1024×768降为640×480)就有可能产生窗口画面超过显示区的困扰,如图9-1所示。
Java 为了解决这些问题,便以布局管理器(Layout Manager )来作为布局的代管人,使程序设计人员不必为这些琐碎的显示问题伤透脑筋。
布局管理器的功能包括设置计算容器的最佳和最小尺寸以及将容器中的组件大小及位置作合适的安排。
当用户调整应用软件窗口大小,或是改变分辨率时,其组件大小会被自动调整,即使在差异很大的分辨率环境下,布局管理器仍然发挥其功用。
下面介绍几种常用的布局管理器。
9.2 BorderLayout 布局管理器BorderLayout 布局管理器将整个窗口按方位分为5个部分:South ,North ,West ,East 和Center ,它是一种非常简单、实用的布局管理器,也是JBuilder X 为应用程序图形界面设置的默认布局管理器。
下面就通过一个示例来说明BorderLayout 布局管理器的使用方法,该实例将在图形界面中添加5个按钮。
JAVA基础:FlowLayout布局管理器

在前⾯的例⼦中,使⽤到了FlowLayout布局管理器。
FlowLayout型布局管理器对容器中组件进⾏布局的⽅式是将组件逐个地安放在容器中的⼀⾏上。
⼀⾏放满后就另起⼀个新⾏。
FlowLayout有三种构造⽅法: public FlowLayout() public FlowLayout(int align) public F10wLayout(int align,int hgap,int vgap) 在默认情况下,FlowLayout将组件居中放置在容器的某⼀⾏上,如果不想采⽤这种居中对齐的⽅式,考试,⼤提⽰FlowLayout的构造⽅法中提供了⼀个对齐⽅式的可选项align。
使⽤该选项,可以将组件的对齐⽅式设定为左对齐或者右对齐。
align的可取值有FlowLayout.LEFT,FlowLayout.RIGHT和FlowLayout.CENTER三种形式,它们分别将组件对齐⽅式设定为左对齐、右对齐和居中,例如: new FlowLayout(FlowLayout.LEFT)这条语句创建了⼀个使⽤左对齐⽅式的FlowLayout的实例。
此外,FlowLayout的构造⽅法中还有⼀对可选项hgap和vgap,使⽤这对可选项可以设定组件的⽔平间距和垂直间距。
与其他布局管理器不同的是,FlowLayout布局管理器并不强⾏设定组件的⼤⼩,⽽是允许组件拥有它们⾃⼰所希望的尺⼨。
注意:每个组件都有⼀个getPreferredSize()⽅法,容器的布局管理器会调⽤这⼀⽅法取得每个组件希望的⼤⼩。
下⾯是⼏个使⽤setLayout()⽅法实现FlowLayout的例⼦: setLayout(new FlowLayout(FlowLayout.RIGHT,20,40)); setLayout(new FlowLayout(FlowLayout.LEFT)); setLayout(new FlowLayout());。
java中OverlayLayout(重叠)布局管理器专题

参考文现:孙卫琴《java面向对象程序设计》其他不详本文作者:黄邦勇帅学习本文前提条件:应学习过AWT图形编程。
本文的说明:本文是对学习Swing时,出现的一个新布局管理器OverlayLayout的专题介绍。
本文对理解该布局管理器的关键概恋,进行了详细讲解,希望读过本文后,大家能熟练运用这个布局管理器。
本文的的内容全是个人理解,因此难免有理解上的错误,望读者指出更正。
声明:禁止抄袭本文,若需要转载本文请注明转载的网址,或者注明转载自“黄邦勇帅”。
OverlayLayout(重叠)布局管理器与组件对齐方式,对齐点对齐点:该概念对于理解OverlayLayout布局至关重要,若不能理解对齐点那么你将对OverlayLayout和组件的对齐方式是一片雾水,为了说明对齐点我们将结合下图来讲解。
从以上两图可以看出来,对于OverlayLayout布局组件在容器中的放置位置是于对齐点有关的,在对齐点的位置(后面后介绍怎样计算)确定后就可以根据组件在X轴和Y轴的对齐方式来确定组件放置的位置。
由第一副图可以知道组件的X轴的值0表示组件的左侧面,1表示组件的右侧面,那么相应的0.25就表示离组件左侧面距离为组件宽度的0.25倍(1/4)处的地方,其他数字可以类推。
同样Y轴的0值表示组件的顶面,1表示组件的底面,0.25就表示组件离顶面距离为1/4处的地方,其他数字类推。
由第二副图可以知道,当组件在容器中的对齐点(对齐点的计算后面会专门讨论)确定后就可以根据设置的组件的X轴与Y轴的值来设置组件的位置,当把组件的X轴设为0时,表示组件以左侧面与X轴的对齐点对齐,如图中的按钮1。
当组件的X轴设为0.5时,则以组件整个宽度的中间部位与X轴的对齐点对齐,同样当X轴为0.75时,表示把组件离左侧面距离为0.75倍(即3/4)组件宽度的地方与X轴的对齐点对齐。
同样,对于Y轴当Y轴的值为0值,就以组件的顶面与Y轴对齐点对齐,当Y轴的值为1时,就以组件的底面与Y轴的对齐点对齐。
安卓之布局总结

安卓之布局总结Adroid布局有⼈形象地⽐喻,Android开发中的布局就相当于⼀栋建筑的外观架构。
布局⽤得好,这栋建筑的外观才美观⾼⼤上。
Android布局管理器Android布局管理器本⾝是⼀个界⾯控件,所有的布局管理器都是ViewGroup类的⼦类,都是可以当做容器类来使⽤的。
因此⼀个布局管理器中可以嵌套其他的布局管理器。
这是⾕歌上找的⼀张布局管理器层级图每⼀个ViewGroup都可以嵌套其他的ViewGroup和View(视图)。
⼀个ViewGroup的⼤⼩是相对的,它即可以是其他ViewGroup的⽗容器,也可以是其他ViewGroup的⼦容器。
在Android中,ViewGroup指代的是布局管理器,也就是下⾯要讲的布局样式,View指代的是布局管理器中的⼀个个控件。
在Android中,控件可以在XML⽂件中定义,也可以程序员根据⾃⼰的需要去定义⼀个类。
本⽂重点先不讨论视图中的控件,还是回归到布局。
Android六⼤基本布局管理器分别是:线性布局(LinearLayout)、表格布局(TableLayout)、⽹格布局(GridLayout)、相对布局(RelativeLayout)、绝对布局(AbsoluteLayout)、层布局(FrameLayout)其中,表格布局是线性布局的⼦类。
⽹格布局是android 4.0后新增的布局。
(1)线性布局线性布局会将容器内的所有控件⼀个挨着⼀个地排列。
属性:1. 排列⽅向android:orienation = “ horizontal/vertical”⽔平排列和垂直排列,Android中默认为垂直排列vertical注意:默认情况下⽔平和垂直⽅向的排列只占⼀⾏,如果⽤android:layout_width来设定控件的宽度,如果控件宽度太⼤,超出屏幕的显⽰范围,屏幕是不会显⽰超出的范围的。
2. 对齐⽅式⽤于控制元素(例如⽂字)在该控件⾥的显⽰位置。
Qt布局管理器应用

Qt布局管理器应用设计软件中各个部件的位置排列,有两种方法:1.设置widget的在父窗体中的坐标和大小widget->move(x,y);widget->resize(width,height);//widget->setGeometry(QRect(x,y,width,height));什么时候用:不想被布局约束,对这种控件可控制时例如下面的可活动按钮缺点:在遇到很多个部件时,一个个算坐标会很麻烦部件不自动随父窗体的变化而变化(这里要重写resizeEvent事件算变化比例建立父子窗体之间的联系,而布局很容易做到)2.布局管理Layout(可控制的部件不要使用布局中,一旦改变会影响到整体布局)经常要用到的三个布局部件QHBoxLayout水平布局QVBoxLayout垂直布局QGridLayout表格布局QHBoxLayout和QVBoxLayout用法相同基本:vlayout->addWidget(w1);vlayout->addWidget(w2);……QGridLayout用法layout->addWidget(widget,row,column,rowSpan,columnSpan);layout->addLayout(layout,row,column,rowSpan,columnSpan);(row,column):控件占据左上角的单元格位置rowSpan:控件占据的行数columnSpan:控件占据的列数(不写默认为1)控件随窗体伸缩将布局与主窗体建立联系layout=new QHBoxLayout(this);或者this->setLayout(layout);layout->addStretch();可伸缩的空间layout->setAlignment(Qt::AlignHCenter);//布局内控件水平居中layout->setSpacing(10);//控件间隔为10layout->setMargin(10);//页边距为10Qt设计器中spacer控件以上在对控件位置调整时常用结合SizePolicy属性控制布局管理中的控件的尺寸自适应方式也就是控件随主窗体伸缩方式(可自行增大或缩小)QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);//可自行增大和收缩Fixed:不能放大或缩小Minimum:不能小于sizeHint尺寸,可放大(若设置了最大尺寸)Maximum:不能放大,可缩小到允许的最小尺寸(若setMinimumSize(10,10)只能缩小到(10,10))Preferred:控件的sizeHint是他的Hint,可以放大或缩小比例因子的使用例:布局中有左右两控件,右边比左边水平伸缩2倍sizePolicy.setHorizontalStretch(1);sizePolicy.setVerticalStretch(0);left->setSizePolicy(sizePolicy);sizePolicy.setHorizontalStretch(2);sizePolicy.setVerticalStretch(0);left->setSizePolicy(sizePolicy);水平伸展比例(1,2)垂直伸展比例(0,0)布局顾名思义是对控件的位置的整体规划,每个控件之间都存在着位置关系,所以改变控件(移动、关闭)会破坏布局结论:两种方法结合使用,应该可以应对大部分界面布局。
borderlayout用法

borderlayout用法BorderLayout是Java中常用的布局管理器之一,它将容器分为5个区域:北、南、东、西和中心。
在使用BorderLayout时,可以将组件添加到不同的区域中,从而实现灵活的布局效果。
具体用法如下:1. 创建一个JFrame或JPanel等容器组件,并设置其布局管理器为BorderLayout。
2. 使用add方法将需要布局的组件添加到容器中,并指定其所在的区域。
例如:frame.add(new JButton('North'), BorderLayout.NORTH);frame.add(new JButton('South'), BorderLayout.SOUTH);frame.add(new JButton('East'), BorderLayout.EAST);frame.add(new JButton('West'), BorderLayout.WEST);frame.add(new JButton('Center'), BorderLayout.CENTER);3. 可以使用setHgap和setVgap方法设置组件之间的水平和垂直间距。
4. 如果一个区域中添加了多个组件,则它们将按照添加的顺序依次排列。
5. 如果某个区域没有添加任何组件,则该区域将不会显示出来。
6. 可以使用remove方法将已添加的组件从容器中移除。
7. 可以使用setPreferredSize方法设置组件的首选大小,以便更好地控制布局效果。
总之,BorderLayout是一种简单易用的布局管理器,适用于各种大小和形状的容器组件,可以轻松实现各种布局效果。
python grid 参数

Python Grid 参数在Python编程语言中,Grid(网格)是一种常见的布局管理器,用于在图形用户界面(GUI)中创建和组织控件。
Grid参数是指在使用Grid布局管理器时,可以设置的各种参数,用于控制控件的位置、大小和对齐方式等。
1. Grid布局管理器简介Grid布局管理器是Python Tkinter库中常用的一种布局管理器,它以网格的形式将控件放置在窗口中。
使用Grid布局管理器,我们可以将窗口划分为行和列,然后将控件放置在相应的行和列中。
Grid布局管理器的主要优点是灵活性和可扩展性。
通过灵活地设置行和列的数量,我们可以轻松地调整控件的位置和大小,以适应不同的窗口尺寸和布局要求。
此外,Grid布局管理器还可以自动调整控件的大小,以适应窗口的变化。
2. 使用Grid布局管理器在使用Grid布局管理器时,我们需要先创建一个窗口对象,并将其设置为Grid布局。
然后,我们可以使用grid()方法将控件放置在窗口中的特定位置。
下面是一个简单的示例代码,演示了如何使用Grid布局管理器在窗口中放置两个按钮:import tkinter as tk# 创建窗口对象window = ()# 设置窗口为Grid布局window.grid()# 创建按钮控件button1 = tk.Button(window, text="Button 1")button2 = tk.Button(window, text="Button 2")# 将按钮控件放置在窗口中的特定位置button1.grid(row=0, column=0)button2.grid(row=0, column=1)# 进入主循环window.mainloop()在上述代码中,我们首先导入了tkinter模块,并创建了一个窗口对象window。
然后,我们通过调用grid()方法将窗口设置为Grid布局。
JavaGUI布局管理器

JavaGUI布局管理器容器可设置布局管理器,管理容器中组件的布局:container.setLayout(new XxxLayout());Java有6种布局管理器,AWT提供了5种:FlowLayoutBorderLayoutGridLayoutGridBagLayoutCradLayoutSwing还提供了⼀种:BoxLayout1、FlowLayout 流式布局顾名思义,组件像⽔流⼀样,从第⼀⾏开始,从左向右依次排列,碰到边界时转到下⼀⾏继续。
三个构造函数:FlowLayout() //使⽤默认参数FlowLayout(int align) //设置对齐⽅式FlowLayout(int align,int hgap,int vgap) //设置对齐⽅式、⽔平间距、垂直间距align是FlowLayout类的常量,⽐如:FlowLayout.LEFT,FlowLayout.CENTER2、BorderLayout 边界布局将容器划分为EAST、WEST、SOUTH、NORTH、CENTER五个部分,每个部分可放置⼀个组件。
2个构造函数:BorderLayout() //使⽤默认参数BorderLayout(int hgap,int vgap) //设置⽔平间距、垂直间距放置组件时需指定位置:container.add(Component comp, Borderlayout.SOUTH); //第⼆个参数是BorderLayout类的常量,指定组件位置container.add(Component comp); //缺省位置时,默认为BorderLayout.CENTER,放在中间⼀共5个位置,⼀个位置最多放1个组件。
当然,可以在⼀个位置放置多个组件,只是后放置的组件会覆盖之前放置的组件。
也可以⼀个都不放。
3、GridLayout ⽹格布局将容器划分为指定⾏数、列数的⽹格,每个格⼦的尺⼨都相同,⼀个格⼦中放置⼀个组件,适合组件⼤⼩差不多的,⽐如放置计算器的按钮。
1-12 AWT布局

public BorderLayout() public BorderLayout(int horizontalGap, int verticalGap)
各组件间的水平和竖直间距为缺省值0个象素。
各组件间的水平和竖直间距为指定值。
外观的管理与控制 ——BorderLayout
public void show(Container parent, String name) public void next(Container parent) public void previous(Container parent) public void first(Container parent) public void last(Container parent) 其中,Container是拥有该CardLayout布局管理器的容器。
外观的管理与控制 ——CardLayout
CardLayout类有二种构造方法:
public CardLayout()
组件距容器左右边界和上下边界的距离为缺省值0个象素。
public CardLayout(int horizontalGap, int verticalGap)
组件距容器左右边界和上下边界的距离为指定值。 与BorderLayout类和GridLayout类相类似,每张牌中只能放 置一个组件,如果想在一张牌放置多个组件,则必须先在该 牌放一个容器,再将多个组件放在该容器中。 采用CardLayout布局方式时,向容器中添加组件时可以为 组件取一个名字,以供更换显示组件时使用: add(String, Component);
如果容器使用了BorderLayout布局方式,则用add()方法往容 器中添加组件时必须指明添加的位置,否则组件将无法正确显 示(不同的布局管理器,向容器中添加组件的方法也不同)。 add(“West”, new Button(“West”)); add(“North”, new Button(“North”)); add(new Button(“West”), BorderLayout.SOUTH); 若没有指明放置位置,则表明为默认的“Center”方位。 每个区域只能添加一个组件,若添加多个,则只能显示一个。 如果想在一个区域添加多个组件,则必须先在该区域放一个 Panel容器,再将多个组件放在该Panel容器中。 若每个区域或若干个区域没有放置组件,东西南北区域将不 会有预留,而中间区域将置空。
Python中Tkinter布局管理grid的使用

Python中Tkinter布局管理grid的使⽤⽬录何时使⽤ grid 管理器?⽤法⽅法pack、grid 和 place 均⽤于管理同在⼀个⽗组件下的所有组件的布局,其中:pack 是按添加顺序排列组件grid 是按⾏/列形式排列组件place 则允许程序员指定组件的⼤⼩和位置何时使⽤ grid 管理器?grid 管理器可以说是 Tkinter 这三个布局管理器中最灵活多变的。
如果你只希望学习使⽤⼀个布局管理器,那么 grid 绝对是⾸选。
当你在设计对话框的时候,使⽤ gird 尤其便捷。
如果你此前⼀直在⽤ pack 构造窗⼝布局,那么学习完 grid 你会悔恨当初为啥不早学它。
使⽤⼀个 grid 就可以简单的实现你⽤很多个框架和 pack 搭建起来的效果。
注意:不要在同⼀个⽗组件中混合使⽤ pack 和 grid,因为 Tkinter 会很认真地在那⼉计算到底先使⽤那个布局管理器......以⾄于你等了半个⼩时,Tkinter 还在那⼉纠结不出结果!⽤法使⽤ grid 排列组件,只需告诉它你想要将组件放置的位置(⾏/列,row 选项指定⾏,cloumn 选项指定列)。
此外,你并不⽤提前指出⽹格(grid 分布给组件的位置称为⽹格)的尺⼨,因为管理器会⾃动计算。
import tkinter as tkroot = ()# column 默认值是 0bel(root, text="⽤户名").grid(row=0)bel(root, text="密码").grid(row=1)tk.Entry(root).grid(row=0, column=1)tk.Entry(root, show="*").grid(row=1, column=1)root.mainloop()默认情况下组件会居中显⽰在对应的⽹格⾥,你可以使⽤ sticky 选项来修改这⼀特性。
java_swing面试题目(3篇)

第1篇一、Java Swing基本概念1. 什么是Java Swing?答:Java Swing是一种用于创建图形用户界面的库,它是Java语言的一个扩展,允许开发者创建具有丰富视觉效果的桌面应用程序。
2. Swing的组件有哪些?答:Swing组件包括基本组件(如按钮、标签、文本框等)、容器组件(如面板、窗口、滚动条等)、特殊组件(如树、表格等)。
3. Swing与AWT的区别是什么?答:Swing是基于Java的,而AWT是基于本地平台的。
Swing组件在不同平台上表现一致,而AWT组件在不同平台上可能有所不同。
Swing运行速度较慢,但提供了更多功能和更好的用户体验。
二、Swing基本组件1. 如何创建一个按钮,并设置其文本和字体?答:使用JButton类创建按钮,并设置其文本和字体。
```javaJButton button = new JButton("按钮");button.setFont(new Font("宋体", Font.PLAIN, 12));```2. 如何获取并设置文本框中的文本?答:使用JTextField类创建文本框,并通过getText()和setText()方法获取和设置文本。
```javaJTextField textField = new JTextField();String text = textField.getText(); // 获取文本textField.setText("新文本"); // 设置文本```3. 如何使用单选按钮(JRadioButton)实现多选?答:使用JRadioButton类创建单选按钮,并使用ButtonGroup类将它们分组。
```javaJRadioButton radioButton1 = new JRadioButton("选项1");JRadioButton radioButton2 = new JRadioButton("选项2");ButtonGroup buttonGroup = new ButtonGroup();buttonGroup.add(radioButton1);buttonGroup.add(radioButton2);```4. 如何使用复选框(JCheckBox)实现多选?答:使用JCheckBox类创建复选框,它们之间互不影响。
JAVASWING布局管理器实例之GRIDBAGLAYOUT,实现左右选择框

说来惭愧,使用Swing快2年了,一直没有深入研究Swing中著名的布局管理器GridBagLayout,说他著名是因为他布局灵活,可以适用各种复杂的布局要求,当然也因为他是著名的复杂,这次由于过几天一次重要的面试,“迫使”我不得不好好研究一下(哈哈,其前太懒了,以后一定多注意。
先来分享一下我的学习成果,对一些重要参数进行说明:1. gridx,gridy 设置组件的位置:其实就是组件行列的设置,注意都是从0开始的,比如 gridx=0,gridy=1时放在0行1列。
2.gridwidth,gridheight—设置组件跨越的行列,默认值为1;GridBagConstraints.REMAINDER常量,代表此组件为此行或此列的最后一个组件,会占据所有剩余的空间。
3. weightx,weighty——用来设置窗口变大时,各组件跟着变大的比例。
比如组件A的weightx=0.5,组件B的weightx=1,那么窗口X轴变大时剩余的空间就会以1:2的比例分配给组件A和B.4.anchor —当组件空间大于组件本身时,要将组件置于何处。
有CENTER (默认值)、NORTH、NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST选择。
5.insets ——设置组件之间彼此的间距。
它有四个参数,分别是上,左,下,右,默认为(0,0,0,0)。
好了,先看一下左右选择框的实现吧:import java.awt.Dimension;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.BorderFactory;import javax.swing.DefaultListModel;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException;public class MyFrame extends JFrame {JPanel mainPanel = new JPanel();JButton add = new JButton();JButton left = new JButton();JButton right = new JButton();JLabel label = new JLabel();JTextField field = new JTextField();DefaultListModel leftModel = new DefaultListModel(); DefaultListModel rightMOdel = new DefaultListModel(); JList leftList = new JList(leftModel);JList rightList = new JList(rightMOdel);JPanel left_Right_Panel = new JPanel();public MyFrame() {this.setTitle("test");this.setPreferredSize(new Dimension(600, 400)); this.initComponent();this.addData();this.setVisible(true);this.pack();}/*** 初始化组件*/private void initComponent() {label.setText("添加选项:");add.setText("添加");leftList.setPreferredSize(new Dimension(150, 150));rightList.setPreferredSize(leftList.getPreferredSize());left.setText("左");right.setText("右");mainPanel.setBorder(BorderFactory.createTitledBorder("左右选择框"));mainPanel.setLayout(new GridBagLayout());GridBagConstraints c = new GridBagConstraints();c.gridx = 0; // 0行0列c.gridy = 0;c.gridwidth = 1;c.gridheight = 1;c.fill = GridBagConstraints.HORIZONTAL;c.weightx = 0;c.weighty = 0;mainPanel.add(label, c);c.gridx++;c.weightx = 1;mainPanel.add(field, c);c.gridx++;c.weightx = 0;c.gridwidth = 1;c.gridheight = 1;// c.fill = GridBagConstraints.HORIZONTAL;mainPanel.add(add, c);c.gridx = 0;c.gridy = 1;c.weightx = 1;c.weighty = 1;c.gridwidth = 2;c.gridheight = 2;c.fill = GridBagConstraints.BOTH;mainPanel.add(leftList, c);c.gridx = 2;c.gridy = 1;c.gridwidth = 1;c.gridheight = 1;c.weightx = 0;c.weighty = 0.5;c.anchor = GridBagConstraints.SOUTH;c.fill = GridBagConstraints.HORIZONTAL;mainPanel.add(left, c);c.gridx = 2;c.gridy = 2;c.anchor = GridBagConstraints.NORTH;c.fill = GridBagConstraints.HORIZONTAL;mainPanel.add(right, c);c.gridx = 3;c.gridy = 1;c.gridwidth = 1;c.gridheight = 2;c.weightx = 1;c.weighty = 1;c.fill = GridBagConstraints.BOTH;mainPanel.add(rightList, c);this.getContentPane().add(mainPanel);}private void addData() {add.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stubaddItem();}});left.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stubleftItem();}});right.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stubrightItem();}});}/*** 增加项*/private void addItem() {if (field.getText() != null&& !field.getText().equals("")) {((DefaultListModel) leftList.getModel()).addElement(field.getText()); field.setText("");}}/*** 左移项*/private void leftItem() {if (rightList.getSelectedIndex() != -1) {Object o = rightList.getSelectedValue();((DefaultListModel)rightList.getModel()).remove(rightList.getSelectedIndex());((DefaultListModel)leftList.getModel()).addElement(o);}}/*** 右移项*/private void rightItem() {if (leftList.getSelectedIndex() != -1) {Object o = leftList.getSelectedValue();((DefaultListModel)leftList.getModel()).remove(leftList.getSelectedIndex());((DefaultListModel)rightList.getModel()).addElement(o);}}public static void main(String args[]) {try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnsupportedLookAndFeelException e) {// TODO Auto-generated catch blocke.printStackTrace();}MyFrame frame = new MyFrame();}}。
qwidget setlayout的用法

qwidget setlayout的用法QWidget setLayout的用法•setLayout()是Qt中QWidget类的一个成员函数,用于设置一个布局管理器(layout)对象在当前的QWidget对象中进行布局管理。
•QWidget是Qt中所有UI组件的基类,包括窗口(windows)、对话框(dialogs)、按钮(buttons)等,可以通过setLayout来设置这些组件的布局。
1. 介绍setLayout的参数类型在用setLayout函数之前,我们需要先了解setLayout所接收的参数类型。
setLayout的参数是一个指向QLayout类的指针,即一个布局管理器对象的指针。
布局管理器是一种能够自动排列和调整大小的容器,它用于将多个UI组件组织在一起,并根据一定的规则进行自动布局。
Qt提供了多种布局管理器,包括水平布局(QHBoxLayout)、垂直布局(QVBoxLayout)、网格布局(QGridLayout)等。
2. 使用setLayout设置布局管理器我们来看一个示例代码,演示如何使用setLayout函数来设置一个垂直布局管理器。
#include <QtWidgets>int main(int argc, char *argv[]){QApplication a(argc, argv);QWidget *widget = new QWidget();QVBoxLayout *layout = new QVBoxLayout();QLabel *label1 = new QLabel("Label 1");QLabel *label2 = new QLabel("Label 2");layout->addWidget(label1);layout->addWidget(label2);widget->setLayout(layout);widget->show();return ();}在上述代码中,我们首先创建了一个QWidget对象,然后创建了一个QVBoxLayout对象作为布局管理器。
第5章 基于Swing的图形化用户界面_1布局管理器与事件处理 - 全

通过 java.awt 包
创建 GUI
容器 组件 布局管理器
包含 AWT 容器组件
以图形表示的对象允许用户交互
AWT 包 含 内 容
定义 GUI 组件的位置
使用 AWT 图形方法相对于窗口绘制图形
图形和绘制方法
字体 事件
创建并构造用于选择新字体的对象 用于用户和系统交互
AWT类结构
框架JFrame
JFrame是放置其他Swing组件的顶级容器。
JFrame用于在Swing程序中创建顶层窗口。 默认情况下,框架的尺寸是没有实际意义的0X0像素。 为了设定合适的框架大小,要调用框架的setSize方法。
默认情况下,框架在创建时是不可见的。为了显示框架 ,要调用框架的setVisible方法。
AWTEvent Font Component ng.object Graphics MenuComponent 布局管理器类 Window Frame Container
Panel
Applet
Swing概述
通过 Swing (轻量级组件,纯Java组件) Javax.swing 包 创建 GUI
默认情况下,当用户关闭一个框架时,该框架会隐藏起
来,程序不会终止,调用setDefaultCloseOperation。
JFrame应用示例
创建具有以下特征的窗口: • 自定义窗口的标题; • 窗口的大小不可变(300,200); • 窗口居中显示。
标题
最大化按钮 失效
JFrame应用示例
import javax.swing.*; class App5_1 { public static void main(String[] args) { JFrame f=new JFrame("第一个Java窗口"); //创建容器 f.setSize(300,200); //设置容器大小 f.setLocationRelativeTo(null) ; //框架居中 f.setVisible(true); //设置框架可见性 f.setResizable(false); //设置不能改变框架大小 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
布局管理器在Java程序设计中的应用

法 中 分 别 在 p 中 增 加 标 签 Ila 1 bN me和 文本 框 t ma ,2中增 加 f ep N 标 签 l u e N mbr和 文 本 框 i u b rp 中增 加 标 签 le f m e ,3 N S x和 单
选 框 c Ma 、h e l。4 中 增 加 标 签 l ̄ b 和 下 拉 列 表 框 h l cF ma p e e bo 表 1 Mo ,5中增 加 p 3和 p ,6设 为 B reL yu 布 局 , 后 在 北 4p od rao t 然 在 图形 用 户 界 面 设 计 过 程 中 .综 合 运 用 这 些 布局 管 理 器 可 c b p 增 加 p 、 增 加 p 、 增 加 p ,7 p 1中 2南 5 p 、8按 如 此 添 加 上 组 件 。最 后 以 满 足 一 般 的 需 要 。 然 对 于 特 殊 的 具 体 应 用 . 可 以 通 过 实 现 当 还 6p 8分 别 添 加在 框 架 的北 、 中和 南 部 。 Ly uM n gr Ly uM n gr ao t a ae 或 ao t a ae2接 口来 定 义 自 己 的 布 局 管 理 把 p 、7和 p
L y uMa a e2设 计 自 己布 局 管理 的 思 想 。 ao t ngr
【 关键宇 】Jv ; :aa 布局 管理 器; 图形用 户界 面; ; 类
0 引 言 .
通 过 一 个 例 子 来 说 明 布 局 管 理 器 在 图形 用 户 界 面 设 计 中 的
2。
姓 名 辕 入面 板
蛙续 置 放 .
h - 时
Q_删 皿
形t 十 框线 表 .每 擎 格中 一 组件 c 无 一 的 格 个 元 放 个 .
setlayout的用法

setlayout的用法setLayout方法是Java的一个布局管理器重要的方法,也是GUI 编程的基础。
它的用法在实现Java程序制作的GUI界面中显得尤为重要,本文将对setLayout的用法及它的布局管理器包括FlowLayout、GridLayout和BorderLayout进行详细地剖析。
一、 setLayout的用法setLayout方法的作用是设置容器的布局管理器,在使用GUI编程时容器是必不可少的,而容器要想使用布局管理器来管理窗口中的组件,就必须调用setLayout方法。
在不同的操作系统上,setLayout方法的写法也有所不同,如果是在Java SE环境中,它的写法为:public void setLayout(LayoutManager manager)其中,LayoutManager是一个布局上下文,它指定容器中的组件的布局方式。
它允许程序员按照自己的意愿改变容器的布局。
一般地,调用setLayout方法的时候要指定布局管理器,因此在使用setLayout方法前,必须有一个布局管理器,在Java中有三种布局管理器:FlowLayout、GridLayout和BorderLayout。
二、局管理器1. FlowLayoutFlowLayout是一种比较简单的布局管理器,它使用组件的排列顺序来安排组件的位置,组件是水平排列的,当一行排满后,自动换行,它是容器的默认布局。
调用FlowLayout的方法如下:Container.setLayout(new FlowLayout())2. GridLayoutGridLayout可以同时安排多个控件,它的用法跟表格很类似,它将容器分成等大的网格,然后把组件按照行和列的方式排列,类似于表格。
调用GridLayout的方法如下:Container.setLayout(new GridLayout(4,2))其中,4表示行数,2表示列数。
Android移动应用开发技术与实践课件第4章 Android布局管理器

❖ android:layout_height="match_parent" >
❖ <Button
编译并运行结果如图4-8:
【程序说明】
l Button中对按钮的属性 进行配置。
l 配置声明了按钮的ID、 大小、以及名称。
4.5 帧布局(FrameLayout)
❖ FrameLayout(帧布局)可以说是六大布局中最为简单的一个布局,这个布局直接在屏 幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把他们放到这块 区域的左上角,而这种布局方式却没有任何的定位方式,所以它应用的场景并不多。 帧布局的大小由控件中最大的子控件决定,如果控件的大小一样大的话,那么同一时 刻就只能看到最上面的那个组件。后续添加的控件会覆盖前一个。虽然默认会将控 件放置在左上角,但是我们也可以通过layout_gravity属性,指定到其他的位置。
❖ 照垂直可以让它的子元素垂直或水平的方式排成一行(不设置方向的时候默认按方向 排列)。下面示例
❖ 【例4-1】示例是LinearLayout实例的main.xml:
4.1.2 LinearLayout实例
<string name= "color_blue">blue</string> <string name= "color_white">white</string> <string name= "color_black">black</string> <string name= "color_yellow">yellow</string> <string name= "color_unknown">unknown</string> </resources>
5_View入门与布局管理器

通用属性:是否展示
可以通过设置android:visibility属性来控制视图是否展示在界面中 ,当然也可以通过调用setVisibility(int visibility)方法来进行控制.
设置值有:
visible(默认值,显示); invisible(不显示,但是仍然占用空间); gone(不显示,不占用空间)
置。但允许有多个显 示对象, 但后一个将会直接在前 一个之
上进行覆盖显示,把前一个部
份或全部挡住(除非后一个是 透明的)。
要点:
android:width 与 android:height :
这两个属性是每个View必须设置的两个属性,表示组件的填充方式,
所有在View都必须指定它的填充方式,即设置android:layout_width和 android:layout_height,可以为三种值 (1)具体的像素值,如20px (2)wrap_content,表示按控件文本实际长度显示 (3)fill_parent,表示填充剩下的所有可用空间。2.2以后采用 match_parent来替代fill_parent,用法上没有区别.
ViewGroup的扩展
View入门与布局管理器
View基本认识 View的通用属性
ViewGroup
Android中五种布局管理器 Android中Tab布局的实现(TabActivity)
五种布局管理器
FrameLayout :帧布局管理器
LinearLayout: 线性布局管理器
另一类,通过实现事件发生时的回调方法来对时间进行响应。如
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
13
练习
Implements interface LayoutManager2 Provides horizontal gap spacing and
vertical gap spacing
7
BorderLayout Demo
11.17.3 GridLayout
GridLayout
Divides container into a grid Every component has the same width and
height
9
GridLayout Demo
其它布局
BorderLayout BoxLayout CardLayout FlowLayout GridBagLayout GridLayout GroupLayout SpringLayout
绝对布局
Set the container's layout manager to null by calling setLayout(null).
Default for JFrames (and other windows). Arranges the components into five areas: NORTH, SOUTH, EAST, WEST and CENTER.
Arranges the components into rows and colrderLayout GridLayout
Default for javax.swing.JPanel. Places components sequentially (left to right) in the order they were added. It is also possible to specify the order of the components by using the Container method add, which takes a Component and an integer index position as arguments.
or right aligned
FlowLayout Demo
FlowLayout Demo
BorderLayout
BorderLayout
Arranges components into five regions – north, south, east, west and center
FlowLayout
FlowLayout
Simplest layout manager Components are placed left to right in the
order they are added Components can be left aligned, centered
Call the Component class's setbounds method for each of the container's children.
Call the Component class's repaint method.
Using Panels to Manage More Complex Layouts
GUI 布局管理器
简介 FlowLayout BorderLayout GridLayout 其它 LayoutManager 组合布局
布局管理器
负责容器中各组件的位置和大小,两种容器: JPanel – 默认为 FlowLayout 布局,可更改
JPanel panel = new JPanel(new BorderLayout());
Content Pane – 默然为 BorderLayout 布局 可更改
Container contentPane = frame.getContentPane(); contentPane.setLayout(new FlowLayout());
常见布局管理器
Layout manager Description