Java图形化界面设计——布局管理器之BorderLayout(边界布局)
- 格式:docx
- 大小:17.75 KB
- 文档页数:6
java实验5图形⽤户界⾯设计试验常⽤布局1)、流布局: FlowLayout 从左到右,⾃上⽽下⽅式在容器中排列,控件的⼤⼩不会随容器⼤⼩变化.容器.setLayout(new FlowLayout(FlowLayout.LEFT));2)、⽹格布局: GridLayout 按照指定⾏数与列数,将容器分成⼤⼩相等的单元格每个单元格放置⼀个控件. 不能将控件放在指定单元格 容器.setLayout(new GridLayout(3,4,10,15));3)、边界布局: BorderLayout 将容器分成东、西、南、北、中五个部分 容器.setLayout(new BorderLayout()); 窗⼝的内容⾯板默认布局就是边界布局。
容器.add(控件,BorderLayout.NORTH);4)、混合布局: 使⽤JPanel,将多个布局组合在⼀起使⽤5)、绝对布局 null: 以坐标定位 容器.setLayout(null); 每个控件在放置在容器之前,必须设置其边界 setBounds(x,y,width,height); btn.setBounds(10,100,30,60);常⽤事件1)、事件源 EventSource:能够触发事件控件如:JButton,JTextField,JFrame,JComboBox,....2)、事件 Event:ActionEvent,KeyEvent,WindowEvent,TextEvent,...3)、事件侦听者Listener(接⼝) ActionListener,WindowListener,...class A implements ActionListener{public void actionPerformed(ActionEvent e){....}}A lis=new A();4)、事件处理函数public void actionPerformed(ActionEvent e){....}事件流程:事件源触发事件-->事件源侦听者接收事件-->⾃动调⽤相应事件处理函数.实践编程1.在应⽤程序窗体中安排1个⽂本框,⼀个标签。
一、实验目的通过本次实验,掌握Java Swing框架中常用的布局管理器,如FlowLayout、BorderLayout、GridLayout、GridBagLayout等,并学会如何使用这些布局管理器对窗口进行合理布局,提高GUI应用程序的界面设计能力。
二、实验环境1. 开发工具:Eclipse2. 开发语言:Java3. 环境配置:Java Development Kit(JDK)版本为1.8三、实验内容1. 流式布局(FlowLayout)2. 边界布局(BorderLayout)3. 网格布局(GridLayout)4. 网格袋布局(GridBagLayout)四、实验步骤1. 流式布局(FlowLayout)(1)创建一个窗口,并设置窗口标题为“FlowLayout”。
(2)在窗口中添加四个按钮,分别为“Button1”、“Button2”、“Button3”和“Button4”。
(3)设置窗口的布局管理器为FlowLayout。
(4)运行程序,观察窗口布局效果。
2. 边界布局(BorderLayout)(1)创建一个窗口,并设置窗口标题为“BorderLayout”。
(2)在窗口中添加四个标签,分别为“North”、“South”、“East”和“West”。
(3)设置窗口的布局管理器为BorderLayout。
(4)运行程序,观察窗口布局效果。
3. 网格布局(GridLayout)(1)创建一个窗口,并设置窗口标题为“GridLayout”。
(2)在窗口中添加四个按钮,分别为“Button1”、“Button2”、“Button3”和“Button4”。
(3)设置窗口的布局管理器为GridLayout,并设置每行和每列的组件数量为2。
(4)运行程序,观察窗口布局效果。
4. 网格袋布局(GridBagLayout)(1)创建一个窗口,并设置窗口标题为“GridBagLayout”。
j a v a图形化界面练习及答案As a person, we must have independent thoughts and personality.作业标题:第四次练习题(总分:得分:分)一、单选题(共有题目15题,共计分)1.下列属于容器的组件有A.JButtonB.JPaneC.CanvasD.JTextArea学生的答案: B标准答案: B该题分数:学生得分: 分2.下列方法中,不属于WindowListener接口的是A.windowOpened()B.windowClosed()C.windowActivated()D.windowAdapter学生的答案: D标准答案: D该题分数:学生得分: 分3.下列不属于Swing中组件的是( )。
A.JPanelB.JTableC.MenuD.JFrame学生的答案: C标准答案: C该题分数:学生得分: 分4.以下Swing组件中哪一个不是顶层容器组件( )。
A.框架B.对话框C.面板D.小程序学生的答案: C标准答案: A该题分数:学生得分: 0分5.对于Swing基本控件单选框,若要使两个单选框对象之间具有相互排斥的关系,需要( )。
A.创建两个单选框对象时定义相同的对象名B.将两个单选框对象放在同一个面板上C.定义一个ButtonGroup对象group,将两个单选框对象加到group中D.让两个单选框排成一行或一列学生的答案: C标准答案: C该题分数:学生得分: 分6.容器被重新设置大小后,( )布局管理器的容器中的组件大小不随容器大小的变化而改变。
A.CardLayoutB.FlowLayoutC.BorderLayoutD.GridLayout学生的答案: B标准答案: B该题分数:学生得分: 分7.下列哪个类创建的对象可以触发ActionEvent事件( )。
A.类B.包的子类C.类D.类学生的答案: A标准答案: A该题分数:学生得分: 分8.下列叙述中哪个是正确的( )A.不是任何组件都可以触发MouseEvent事件B.处理WindowEvent事件的接口是FocusListenerC.类实现了MouseListener接口D.是一个接口学生的答案: C标准答案: C该题分数:学生得分: 分9.在基于Swing的图形用户界面设计中,面板属于( )。
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是一种简单易用的布局管理器,适用于各种大小和形状的容器组件,可以轻松实现各种布局效果。
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 ⽹格布局将容器划分为指定⾏数、列数的⽹格,每个格⼦的尺⼨都相同,⼀个格⼦中放置⼀个组件,适合组件⼤⼩差不多的,⽐如放置计算器的按钮。
5—1 下列关于容器的描述中,错误的是DA.容器是由若干个组建和容器组成的B.容器是对图形界面中界面元素的一种管理C.容器是一种对指定宽和高的矩形范围D.容器都是可以独立的窗口5-2 下列界面元素中,不是容器的是AA。
List B.Frame C。
Dialog D。
Panel5-3 下列关于实现图形用户界面的描述中,错误的是DA.放在容器中的组件首先要定义,接着要初始化B.放在容器中的多个组件是要进行布局的,默认的布局策略是FlowLayoutC.容器中所有组件都是事件组件,都可以产生事件对象D.事件处理是忧监听者定义的方法来实现的5-4 下列关于组件类的描述中,错误的是AA.组件类中包含了文本组件类(TextComponent)和菜单组件类(MenuComponent)B.标签(Label)和按钮(Button)是组件类(Component)的子类C.面板(Panel)和窗口(Window)是容器类(Container)的子类D.文本框(TextField)和文本区(TextArea)是文本组件类(TextComponent)的子类5—5 在对下列语句的解释中,错误的是Cbut。
addActionListener(this);A.but是某种事件对象,如按钮事件对象B.t his表示当前容器C.A ctionListener是动作事件的监听者D.该语句的功能是将but对象注册为this对象的监听者5—6 所有事件类的父类是CA.ActionEvent B.AwtEvent C.KeyEvent D.MouseEvent5—7 所有GUI标准组件类的父类是CA.Buttom B.List C.Component D.Container5-8 下列各种布局管理器中Window类、Dialog类和Frame类的默认布局是CA.FlowLayout B.CardLayout C.BorderLayout D.GridLayout5—9 在下列各种容器中,最简单的无边框的又不能移动和缩放的只能包含在另一种容器中的容器是D A.Window B.Dialog C.Frame D.Panel5-10 下列关于菜单和对话框的描述中,错误的是CA.Frame容器是可以容纳菜单组件的容器B.菜单条中可包含若干个菜单,菜单中又可包含若干菜单项,菜单项中还可包含菜单子项C.对话框与Frame一样都可作为程序的最外层容器D.对话框内不含有菜单条,它由Frame弹出5—1 AWT是抽象窗口工具包的英文缩写。
1.布局对于JFrame窗口,默认布局是BorderLayout布局。
对于JPanel,默认布局是FlowLayout布局。
容器可以使用方法:setLayout(布局对象);来设置自己的布局。
(1)FlowLayout布局FlowLayout类创建的对象称做FlowLayout型布局。
FlowLayout类的一个常用构造方法如下:FlowLayout()该构造方法可以创建一个居中对齐的布局对象。
例如:FlowLayout flow=new FlowLayout();如果一个容器con使用这个布局对象:con.setLayout(flow);那么,con可以使用Container类提供的add方法将组件顺序地添加到容器中,组件按照加入的先后顺序从左向右排列,一行排满之后就转到下一行继续从左至右排列。
FlowLayout布局对象调用flow.setAlignment(FlowLayout.LEFT);来设置组件靠左对齐FlowLayout布局对象调用setHgap(int hgap) 方法和setVgap(int vgap)可以重新设置布局的水平间隙和垂直间隙。
(2)BorderLayout布局BorderLayout 布局是Window型容器的默认布局,例如JFrame、JDialog都是Window类的间接子类,它们的默认布局都是BorderLayout 布局。
容器使用BorderLayout 布局,那么容器空间简单地划分为东、西、南、北、中五个区域。
每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示.添加到某个区域的组件将占据整个这个区域。
每个区域只能放置一个组件,如果向某个已放置了组件的区域再放置一个组件,那么先前的组件将被后者替换掉。
(3)CardLayout 布局使用CardLayout 的容器可以容纳多个组件,但是实际上同一时刻容器只能从这些组件中选出一个来显示,这个被显示的组件将占据所有的容器空间。
当选择使用JPanel和顶层容器的content pane时,需要考虑布局管理。
JPanel缺省是初始化一个FlowLayout,而content pane缺省是初始化一个BorderLayout。
下面将分别介绍几种最常用的布局管理器:FlowLayout、BorderLayout、BoxLayout、CardLayout、GridLayout和GridBagLayout。
代码演示每一个布局管理器都会有一个代码演示,xxxLayoutDemo.java(见附件)。
这些文件主要有三个方法组成:addComponentsToPane()提供布局逻辑(依据不同的布局管理器和UI内容)。
Java代码1public static void addComponentsToPane(Container pane) {。
}2/**3*createAndShowGUI()实例化一个JFrame,通过它的ContentPane加载布局逻辑内容。
4*/5private static void createAndShowGUI() {6// Create and set up the window.7JFrame frame = new JFrame("FlowLayoutDemo");8frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);9// Set up the content pane.10addComponentsToPane(frame.getContentPane());11// Display the window.12frame.pack();13frame.setVisible(true);14}15//main()程序入口,单独起一个线程,实例化UI。
16public static void main(String[] args) {17javax.swing.SwingUtilities.invokeLater(new Runnable() {18public void run() {19createAndShowGUI();20}21});22}FlowLayoutFlowLayout类是最简单的布局管理器。
《Java基础入门》课后习题答案第8章GUI(图形用户界面)一、填空题1、在Java 中,图形用户界面简称: GUI2、事件监听器: 负责监听事件源上发生的事件,并对各种事件做出响应处理。
3、GUI 设计提供了一些基本的图形用户接口开发工具,如AWT:Swing 和JavaFX。
4、.如果单击Frame窗口有上角的关闭按相能将其关闭:那么这个Frame窗口添加了:WindowListener 监听器,并实现了监听器:windowClosing(WindowEvent e) 的方法。
5、创建下拉式菜单需要使用三个组件,分别是:JMenuBar、JMenu、JMenuItem二、判断题1、容器(Container)是一个可以包含基本组件和其他容器的组件。
对2.可以通过实现AetionListener 接口或者继承AconAdpter 类来实现动作事件监听器。
错3.CardLayout 布局管理器将界面看做一系列卡片,在任何时候只有其中一张卡片是可见的。
对4.非模态对话框是指用户需要等到处理完对话框后才能继续与其他窗口进行交互。
错5.JFrame 的默认布局管理器是FlowLayout。
错三、选择题1.下面四个组件中哪一个不是JComponent 的子类? (B)A.JButtonB.JDialogC. JLabelD.JMenuBar2.下面四个选项中,哪些是事件处理机制中的角色?(多选) (ABD)A.事件B.事件源C.事件接口D.事件监听器3. ActionEvent 的对象会被传递给以下哪个事件处理器方法? (D)A.addChangeListener()B. addActionListener()C. stateChanged()D. actionPerformed()4.下面哪些是FlowLayout 类中表示对齐方式的常量?(多选) (ABD)A.FlowLayout.LEFTB.FlowLayout.CENTERC. FlowLayout. VERTICALD. FlowLayout. RIGHT5.下列选项中关于JavaFX,描述错误的是(C )A.JavaFX是一个强大的图形和多媒体处理工具包集合B. JavaFX 允许开发者来设计、创建、测试、调试和部署客户端程序C.JavaFX不能与Swing实现互操作D.JavaFX可以实现跨平台功能四、简答题1、请简述GUI 中实现事件监听的步骤:●通过实现XxxListener接口或者继承XxxAdapter类实现一个事件监听器类,并对处理监听动作的方法进行重写●创建事件源对象和事件监听器对象●调用事件源的addXxxLisntener()方法,为事件源注册事件监听器对象2、请简述Swing 中的布局管理器有哪些。
java中Swing五种常见的布局⽅式1、边界布局(BorderLayout)2、流式布局(FlowLayout)3、⽹格布局(GridLayout)4、盒⼦布局(BoxLaYout)5、空布局(null)还有其他两种布局,分别是GridBagLayout(⽹格包布局)、CardLayout(卡⽚布局)注意:JFrame和JDialog默认布局为BorderLayout,JPanel和Applet默认布局为FlowLayout边界布局⽰例代码:import java.awt.BorderLayout;import javax.swing.JButton;import javax.swing.JFrame;public class BorderLayoutExample extends JFrame{JButton btn1=new JButton("东");JButton btn2=new JButton("南");JButton btn3=new JButton("西");JButton btn4=new JButton("北");JButton btn5=new JButton("中");BorderLayoutExample(){init();this.setTitle("边界布局");this.setResizable(true);this.setSize(200, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new BorderLayout(10,5)); //默认为0,0;⽔平间距10,垂直间距5this.add(btn1,BorderLayout.EAST);this.add(btn2,BorderLayout.SOUTH);this.add(btn3,BorderLayout.WEST);this.add(btn4,BorderLayout.NORTH);this.add(btn5,BorderLayout.CENTER);}public static void main(String args[]){new BorderLayoutExample();}}运⾏结果:流式布局⽰例代码:import java.awt.FlowLayout;import javax.swing.JButton;import javax.swing.JFrame;public class FlowLayoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");FlowLayoutExample(){init();this.setTitle("流式布局");this.setResizable(true);this.setSize(200, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new FlowLayout(FlowLayout.LEFT,10,5)); //默认为居中;⽔平间距10,垂直间距5 this.add(btn1);this.add(btn2);this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new FlowLayoutExample();}}运⾏结果:⽹格布局⽰例代码:import java.awt.GridLayout;import javax.swing.JButton;import javax.swing.JFrame;public class GridLayoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");GridLayoutExample(){init();this.setTitle("表格布局");this.setResizable(true);this.setSize(300, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new GridLayout(2,3,10,5)); //默认为1⾏,n列;2⾏3列,⽔平间距10,垂直间距5 this.add(btn1);this.add(btn2);this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new GridLayoutExample();}}运⾏结果:盒⼦布局⽰例代码:import javax.swing.Box;import javax.swing.BoxLayout;import javax.swing.JButton;import javax.swing.JFrame;public class BoxLaYoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");BoxLaYoutExample(){init();this.setTitle("表格布局");this.setResizable(true);this.setSize(300, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new BoxLayout(this.getContentPane(),BoxLayout.X_AXIS));//可以使⽤Box容器代替//Box box = new Box(BoxLayout.Y_AXIS);box.add(btn...);box.add(creat..);this.add(btn1);this.add(btn2);this.getContentPane().add(Box.createHorizontalStrut(10)); //采⽤x布局时,添加固定宽度组件隔开 //this.getContentPane().add(Box.createVerticalStrut(5)); //采⽤y布局时,添加固定⾼度组件隔开 this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new BoxLaYoutExample();}}运⾏结果:空布局⽰例代码:import javax.swing.JButton;import javax.swing.JFrame;public class NullLayoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");NullLayoutExample(){init();this.setTitle("空布局");this.setResizable(true);this.setSize(300, 300);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(null);btn1.setBounds(10, 0, 100, 50); //x坐标10,y坐标0,组件宽100,⾼50 btn2.setBounds(20, 50, 100, 50);btn3.setBounds(30, 100, 100, 50);btn4.setBounds(40, 150, 100, 50);btn5.setBounds(50, 200, 100, 50);this.add(btn1);this.add(btn2);this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new NullLayoutExample();}}运⾏结果:。
Java 边界布局和网格布局BorderLayout只管里容器中的5个组件的排列方式,这五个组件的位置分别位于东、南、西、北、中方向,如下图9-22所示。
图9-22 BorderLayout布局方式BoxLayout类允许垂直或水平布置多个组件,垂直排列的组件在重新调整框架的大小时仍然被垂直排列。
BoxLayout布局管理器是用axis参数构造的,该参数指定了将进行的布局类型。
有4个选择:●X_AXIS 从左到右水平布置组件。
●Y_AXIS 从上到下垂直布置组件。
●LINE_AXIS 根据容器的ComponentOrientation属性,按照文字在一行中的排列方式布置组件。
如果容器的ComponentOrientation 表示水平,则将组件水平放置,否则将它们垂直放置。
●PAGE_AXIS 根据容器的ComponentOrientation属性,按照文本行在一页中的排列方式布置组件。
如果容器的ComponentOrientation表示水平,则将组件垂直放置,否则将它们水平放置。
GridLayout类是一个网格布局处理器,它以矩形网格形式对容器的组件进行布置。
它将容器划分为指定行×列个单元格,按组件add的顺序,依次将组件放入单元格中,可以像表格一样指定其单元格之间的水平与垂直间距。
但是,它不可以跨行与跨列,所以只适用于容器内组件排列呈类表格方式的容器布局。
GridLayout布局的功能非常强大,并在布局中也比较常用。
GridLayout构造方法如下所示:●GridLayout( ) 创建具有默认值的网格布局,即每个组件占据一行一列。
●GridLayout(int rows, int cols) 创建具有指定行数和列数的网格布局。
●GridLayout(int rows, int cols, int hgap, int vgap) 创建具有指定行数和列数的网格布局。
例如,在一个面板中,通过“setLayout(new GridLayout(3, 2));”语句,设置布局方式为3行×2列,则显示的效果如图9-23所示。
3ATWSwing事件处理AWT(AbtractWindowingToolkit)是用来创建Java图形用户界面的基本工具.JavaSwing是JFC(JavaFoundationClae)的一部分,它可以弥补AWT的一些不足.Container(容器):扩展组件的抽象基本类,例如Panel、Applet、Window、Dialog和Frame等是由Container演变的类,容器中可以包括多个组件。
LayoutManager(布局管理器):定义容器中组件的摆放位置和大小接口。
Java中定义了几种默认的布局管理器。
Graphic(图形):组件内与图形处理相关的类,每个组件都包含一个图形类的对象。
1组件",ColorgetForeground():获取组件的前景色。
",StringgetName():获取组件的名称。
",DimeniongetSize():以Dimenion对象的形式返回组件的大小。
",voidpaint(Graphicg):绘制该组件。
",voidrepaint():重绘组件。
",voidupdate(Graphicg):更新该组件。
",voidetViible(booleanb):根据参数的值显示或隐藏此组件。
",voidetSize(intwidth,intheight):调整组件的大小,使其宽度和高度分别为width和height。
",voidetName(Stringname):将组件的名称设置为指定的字符串。
",voidetForeground(Colorc):设置组件的前景色。
AWT的组件库画布(Canva)是处于屏幕上的一个空白矩形区域,在该区域可以绘图,也可以获得用户激发的事件。
画布组件可以监听鼠标事件和键盘事件。
publicvoidpaint(Graphicg)由于画布的paint()方法默认操作是清除画布,所以重写此方法的应用程序不需要调用uper.paint(g)。