1、JavaJava程序设计程序设计第第1616章章 用户界面开发安全防护教研室:孙安全防护教研室:孙 璐璐 -学习目标学习目标利用利用JFrameJFrame创建可定制的应用程序主窗口创建可定制的应用程序主窗口理解组件和容器的差异,区别顶级容器和中间理解组件和容器的差异,区别顶级容器和中间容器的作用容器的作用能够灵活应用布局管理器组织界面能够灵活应用布局管理器组织界面如何向容器中添加和布局组件如何向容器中添加和布局组件理解事件机制,掌握各类监听器的创建、注册理解事件机制,掌握各类监听器的创建、注册和处理和处理掌握基本的图形处理程序开发掌握基本的图形处理程序开发 -JavaJava的的GUIGUI
2、图形用户界面(图形用户界面(Graphics User InterfaceGraphics User Interface,简称,简称GUIGUI)是指以图形的方式实现人与计算机之间的交互。在该界是指以图形的方式实现人与计算机之间的交互。在该界面下用户往往只需通过单击、双击、拖曳鼠标和简单的面下用户往往只需通过单击、双击、拖曳鼠标和简单的文字键入就可以轻松地操作计算机完成任务。图形用户文字键入就可以轻松地操作计算机完成任务。图形用户界面生动形象、操作直观简便。界面生动形象、操作直观简便。目前目前JavaJava主要提供了两个处理图形用户界面的类库:主要提供了两个处理图形用户界面的类库:java.
3、awtjava.awt和和javax.swingjavax.swing。其中均包含了用于设计图形。其中均包含了用于设计图形用户界面的各种组件、布局管理器和事件类用户界面的各种组件、布局管理器和事件类.-AWTAWT:抽象窗口工具集(:抽象窗口工具集(Abstract Windows Abstract Windows ToolkitToolkit),由于),由于JavaJava代码可以在不同的系统平代码可以在不同的系统平台运行,而不同平台的图形界面外观设计各有差台运行,而不同平台的图形界面外观设计各有差异,所以异,所以JavaJava程序的图形用户界面在不同的平台程序的图形用户界面在不同的平台上
4、可能出现不同的运行效果,其外观取决于具体上可能出现不同的运行效果,其外观取决于具体的平台,所以称的平台,所以称AWTAWT是一个抽象的工具集。是一个抽象的工具集。JavaJava的的GUIGUI -SwingSwing:SwingSwing是在是在AWTAWT的基础上构建的,提供了的基础上构建的,提供了比标准比标准AWTAWT组件更强大和灵活的功能。与组件更强大和灵活的功能。与AWTAWT组组件不同的是,件不同的是,SwingSwing组件不是由特定的平台代码组件不是由特定的平台代码实现,而是纯粹的实现,而是纯粹的JavaJava代码,因此能够实现与代码,因此能够实现与平台的无关(此类组件一般
5、被称为轻量级组件平台的无关(此类组件一般被称为轻量级组件)。)。SwingSwing类提供了类提供了GUIGUI编程较为通用的部分,被统称为编程较为通用的部分,被统称为Java Foundation ClassesJava Foundation Classes(JavaJava语言基础类,简语言基础类,简称称JFCJFC)。)。JavaJava的的GUIGUI -SwingSwing包简介包简介 JDK1.2JDK1.2以后支持以后支持javax.swingjavax.swing包包 SwingSwing包在图形界面设计上比包在图形界面设计上比AWTAWT更丰富,更更丰富,更美观。美观。Swi
6、ngSwing拥有拥有4 4倍于倍于AWTAWT的用户界面组件。的用户界面组件。是是AWTAWT包基础上的扩展,在很多情况下在包基础上的扩展,在很多情况下在AWTAWT包的部件前加上字母包的部件前加上字母J J即为即为SwingSwing部件的名称,部件的名称,如:如:JFrameJFrame、JAppletJApplet、JButtonJButton等。等。-Swing包简介(续)SwingSwing部件都是部件都是AWTAWT的的ContainerContainer类的直接子类类的直接子类或间接子类或间接子类 SwingSwing与与AWTAWT的事件处理机制相同。处理的事件处理机制相同。
7、处理SwingSwing中的事件一般仍用中的事件一般仍用java.awt.eventjava.awt.event包,但有包,但有的要用到的要用到javax.swing.eventjavax.swing.event包。包。SwingSwing比比AWTAWT部件具有更强的实用性。部件具有更强的实用性。u设置边框设置边框 u使用图标(使用图标(IconIcon)u提示信息提示信息 -使用使用AWT(Abstract Window Toolkit)AWT(Abstract Window Toolkit)组件组件 -Component类 java.awt包中最核心的类就是Component类,它是构成
8、Java图形用户界面的基础,大部分组件都是由该类派生出来的。Component类是一个抽象类,其中定义了组件所具有的一般功能:基本的绘画支持(paint,repaint,update等等)、字体和颜色等外形控制(setFont,SetForeground等等)、大小和位置控制(SetSize,SetLocation等等)、图象处理(实现接口实现接口ImageObserver)以及组件状态控制(SetEnable,isEnable,isVisible,isValid等等),。常见的组件包括:Button,Checkbox,CheckboxGroup,Choice,Label,List,Canva
9、s,TextComponent,Scrollbar等。使用使用AWT(Abstract Window Toolkit)AWT(Abstract Window Toolkit)组件组件 -Container类 Container类是由Component类派生出来的一种特殊类,用来表示各种GUI组件的容器,其主要功能包括:组件的管理:方法add()可以向其中添加一个组件,remove()删除其中的一个组件,布局管理:每个Container类都和一个布局管理器相联,以确定其中组件的布局。Container类可以通过setLayout()方法设置某种布局方式。常见的Container类有:Frame,
10、Panel,Applet等。使用使用AWT(Abstract Window Toolkit)AWT(Abstract Window Toolkit)组件组件 -菜单类 菜单类也是一种组件,只不过菜单类并不是由一般的Component类派生的,而是从MenuComponent类继承得到的。使用使用AWT(Abstract Window Toolkit)AWT(Abstract Window Toolkit)组件组件 -JFrameJFrame的继承层次的继承层次 -SwingSwing类结构图类结构图 -Swing组件的体系结构 基本组件基本组件Component 容器容器Container -
11、Swing组件的分类 组件组件(Component)(Component)u代表一种可以显示在屏幕上的图形元素,也是代表一种可以显示在屏幕上的图形元素,也是一种能与用户进行交互的一种能与用户进行交互的JavaJava对象,例如一个按对象,例如一个按钮,一个标签等。组件不能独立地显示出来,必钮,一个标签等。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。须将组件放在一定的容器中才可以显示出来。容器容器(Container)(Container)u容器类继承于容器类继承于ComponentComponent类,其本身及其子类可类,其本身及其子类可以容纳其他组件以容纳其他组件组件从
12、功能上分为:容器和基本组件组件从功能上分为:容器和基本组件 -Swing组件的分类 容器又分为顶层容器和中间层容器。容器又分为顶层容器和中间层容器。顶层容器:顶层容器:JFrameJFrame、JDialogJDialog、JAppletJApplet 、JWindowJWindow。用。用于构造图形用户界面的窗口,并容纳其它容器和组件,于构造图形用户界面的窗口,并容纳其它容器和组件,它们可以独立存在它们可以独立存在 。中间层容器中间层容器 :JPanelJPanel、JScrollPaneJScrollPane、JToolBarJToolBar、JTabbedPaneJTabbedPane等
13、。容纳其它组件,但是不能独立存在,等。容纳其它组件,但是不能独立存在,需要添加到其它容器中。通常用来按功能组织基本组需要添加到其它容器中。通常用来按功能组织基本组件件 。-基本组件:按钮基本组件:按钮JButtonJButton、文本框、文本框JTextFieldJTextField、JListJList、JMenuJMenu等等。是图形用户界面的基本组成单位,不能独等等。是图形用户界面的基本组成单位,不能独立存在,必须将其添加到一定的容器中。立存在,必须将其添加到一定的容器中。不可编辑信息的显示:向用户显示不可编辑信息的不可编辑信息的显示:向用户显示不可编辑信息的部件,如部件,如JLabel
14、JLabel、JProgressBarJProgressBar和和JToolTipJToolTip。可编辑信息的显示:向用户显示能被编辑的格式化可编辑信息的显示:向用户显示能被编辑的格式化信息的部件,如信息的部件,如JColorChooserJColorChooser、JFileChooseJFileChoose、JTableJTable和和JTextAreaJTextArea。Swing组件的分类 -顶层容器与窗口每一个每一个JavaJava的的GUIGUI程序都必须至少包含一个顶层容器组程序都必须至少包含一个顶层容器组件作为窗口;件作为窗口;SwingSwing中最常用的顶层容器类中最常用
15、的顶层容器类JFrameJFrame:用它创建的框用它创建的框架窗口可以独立存在,并且带有边框、标题及用于关架窗口可以独立存在,并且带有边框、标题及用于关闭和最大化闭和最大化/最小化窗口的图标按钮最小化窗口的图标按钮 。-创建第一个Swing窗口import javax.swing.JFrame;public class MyFirstSwingApp extends JFrame public MyFirstSwingApp(String title,int width,int height)super(title);/调用父类构造方法,同时设置窗口标题调用父类构造方法,同时设置窗口标题/设
16、置窗口的显示尺寸设置窗口的显示尺寸this.setSize(width,height);/设置窗口的关闭动作为关闭整个程序设置窗口的关闭动作为关闭整个程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/一般在构造方法中组织自己的主界面显示一般在构造方法中组织自己的主界面显示DO_NOTHING_ON_CLOSEDO_NOTHING_ON_CLOSEHIDE_ON_CLOSEHIDE_ON_CLOSEDISPOSE_ON_CLOSEDISPOSE_ON_CLOSEEXIT_ON_CLOSEEXIT_ON_CLOSE -创建一个框架窗口im
17、port javax.swing.import javax.swing.*;public class public class JFrameDemoJFrameDemo extends JFrame extends JFrame public JFrameDemo()public JFrameDemo()super(“JFramesuper(“JFrame窗口窗口”);”);setBounds(50,50,300,120);setBounds(50,50,300,120);setDefaultCloseOperation(EXIT_ON_CLOSE);setDefaultCloseOperat
18、ion(EXIT_ON_CLOSE);setVisible(true);setVisible(true);public static void main(String args)public static void main(String args)JFrameDemoJFrameDemo f f=new=new JFrameDemoJFrameDemo();();-创建第一个Swing窗口import javax.swing.import javax.swing.*;public class FirstSwingApp public static void main(String args)
19、/创建一个顶层容器并设置其标题为创建一个顶层容器并设置其标题为FirstSwingApp。JFrame frame=new JFrame(FirstSwingApp);frame.add(new JButton(“OK“);/向窗口中增加一个按钮向窗口中增加一个按钮/设置窗口中右上角的关闭按钮图标的缺省操作事件是关闭程序设置窗口中右上角的关闭按钮图标的缺省操作事件是关闭程序frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(600,400);/设置窗口对象的尺寸设置窗口对象的尺寸/让窗口对象自行决定以最合适的方式
20、显示窗口,并不依赖前面的定义尺寸让窗口对象自行决定以最合适的方式显示窗口,并不依赖前面的定义尺寸frame.pack();frame.setVisible(true);/最后,让窗口对象可见最后,让窗口对象可见 -JFrameJFrameJFrame JFrame 组件用于在组件用于在 Swing Swing 程序中创建窗体,是程序中创建窗体,是放置其他放置其他 Swing Swing 组件的顶级容器,它的构造函数:组件的顶级容器,它的构造函数:uJFrame()JFrame()uJFrame(String Title)JFrame(String Title)缺省的布局管理器是缺省的布局管理器
21、是BoderLayoutBoderLayout添加组件到内容窗格,两种方法,示例:添加组件到内容窗格,两种方法,示例:uframe.getContentPane().add(new frame.getContentPane().add(new JButton(JButton(“buttonbutton”););uframe.add(new JButton(frame.add(new JButton(“buttonbutton”););-JFrame类常用的方法 void void setLayoutsetLayout(LayoutManager manager)(LayoutManager m
22、anager)viod viod addadd(Component comp)(Component comp)void void setBoundssetBounds(int x,int y,int width,int height)(int x,int y,int width,int height)void void setTitlesetTitle(String title)(String title)void void setVisiblesetVisible(Boolean b)(Boolean b)void setSize(int width,int height)void setS
23、ize(int width,int height)void pack()void pack()void remove(Component c)void remove(Component c)Container Container getContentPanegetContentPane()()setDefaultCloseOperationsetDefaultCloseOperation(int operation int operation)所列出的大部分方法也适用于其它容器和组件所列出的大部分方法也适用于其它容器和组件 -JFrame JFrame 包含一个包含一个 JRootPane J
24、RootPane 作为其惟一的子作为其惟一的子容器,用来管理其所有内容,包括:容器,用来管理其所有内容,包括:u内容窗格内容窗格(content pane)(content pane)u菜单菜单u分层窗格分层窗格(layered pane)(layered pane)u玻璃窗格玻璃窗格(glass pane)(glass pane)大部分情况下,我们只使用内容窗格大部分情况下,我们只使用内容窗格JFrameJFrame -Swing GUISwing GUI框架框架菜单栏菜单栏顶级容顶级容器器GUI组件组件GUI组件组件内容窗内容窗格格 -添加组件到窗口JFrameJFrame对象的对象的ge
25、tContentPane()getContentPane()方法返回一个方法返回一个对对contentPanecontentPane的引用的引用 -组件的基本功能颜色设置颜色设置u可以使用可以使用setBackgroundsetBackground()()方法和方法和setForegroundsetForeground()()来设来设置组件的背景色和前景色置组件的背景色和前景色btnOK.setBackground(Color.BLUE);边框设置边框设置u使用使用setBordersetBorder()()方法可以设置组件外围的边框方法可以设置组件外围的边框btnOK.setBorder(B
26、orderFactory.createLineBorder(Color.RED);提示信息提示信息:使用使用setTooltipText()setTooltipText()方法,为组件设置对用户有帮助的提示方法,为组件设置对用户有帮助的提示信息信息btnOK.setToolTipText(Hi,这是一个按钮这是一个按钮);-按钮JButtonJButtonJButton类允许用图标、字符串或两者同时构造类允许用图标、字符串或两者同时构造一个按钮一个按钮JButton()/创建不带有设置文本或图标的按钮。创建不带有设置文本或图标的按钮。JButton(Icon icon)/创建一个带图标的按钮。
27、创建一个带图标的按钮。JButton(String text)/创建一个带文本的按钮。创建一个带文本的按钮。JButton(String text,Icon icon)/创建一个带初始文本和图标的按钮。创建一个带初始文本和图标的按钮。ImageIcon buttonIcon=new ImageIcon(on.gif);JButton btnLogin=new JButton(登陆登陆(L),buttonIcon);btnLogin.setMnemonic(KeyEvent.VK_L);-标签JLabelJLabel JLabel 对象可以显示文本、图像或同时显示二者对象可以显示文本、图像或同时
28、显示二者JLabel()JLabel()JLabel(Icon image)JLabel(Icon image)JLabel(Icon image,int horizontalAlignment)JLabel(Icon image,int horizontalAlignment)JLabel(String text)JLabel(String text)JLabel(String text,Icon icon,int horizontalAlignment)JLabel(String text,Icon icon,int horizontalAlignment)JLabel(String te
29、xt,int horizontalAlignment)aJLabel(String text,int horizontalAlignment)aImageIcon icon=new ImageIcon(on.gif);JLabel lblUser=new JLabel(用户名用户名,icon,SwingConstants.LEFT);SwingConstants SwingConstants 中定义的以下常量:中定义的以下常量:LEFTLEFT、CENTERCENTER、RIGHTRIGHT、LEADING LEADING 或或 TRAILINGTRAILING,定,定义了组件的对齐方义了组件
30、的对齐方式式 -文本组件 -文本组件单行文本输入框单行文本输入框JTextFieldJTextFieldJTextFieldJTextField()()JTextFieldJTextField(Document doc,String text,(Document doc,String text,intint columns)columns)JTextFieldJTextField(intint columns)columns)JTextFieldJTextField(String text)(String text)JTextFieldJTextField(String text,(Strin
31、g text,intint columns)columns)其他主要方法其他主要方法public String public String getTextgetText()/()/获取组件包含的文本获取组件包含的文本public String public String getTextgetText(intint offs,intoffs,int lenlen)/)/获取组件包含的文获取组件包含的文本部分本部分(有偏移量和长度决定有偏移量和长度决定)public String public String getSelectedTextgetSelectedText()/()/返回此返回此 Te
32、xtComponentTextComponent 中中包含的选定文本包含的选定文本 -文本组件多行纯文本编辑框多行纯文本编辑框JTextArea JTextArea JTextAreaJTextArea()()JTextAreaJTextArea(intint rows,rows,intint columns)columns)JTextAreaJTextArea(String text)(String text)JTextAreaJTextArea(String text,(String text,intint rows,rows,intint columns)columns)密码输入框密码输
33、入框JPasswordFieldJPasswordFieldJPasswordField()JPasswordField()JPasswordField(int columns)JPasswordField(int columns)JPasswordField(String text)JPasswordField(String text)JPasswordField(String text,int columns)JPasswordField(String text,int columns)设置输入字符的回显字符的方法是:设置输入字符的回显字符的方法是:public void public v
34、oid setEchoCharsetEchoChar(char c)(char c)-选择性输入组件JCheckBoxJCheckBoxu复选框是一个可以被选定和取消选定的项,它将复选框是一个可以被选定和取消选定的项,它将其选择状态显示给用户。其选择状态显示给用户。JCheckBoxJCheckBox()()JCheckBoxJCheckBox(Icon(Icon iconicon)JCheckBoxJCheckBox(Icon(Icon iconicon,booleanboolean selected)selected)JCheckBoxJCheckBox(String text)(Stri
35、ng text)JCheckBoxJCheckBox(String text,(String text,booleanboolean selected)selected)JCheckBoxJCheckBox(String text,Icon(String text,Icon iconicon)JCheckBoxJCheckBox(String text,Icon(String text,Icon iconicon,booleanboolean selected)selected)判断一个复选框是否被选中的方法是判断一个复选框是否被选中的方法是public boolean isSelected(
36、)public boolean isSelected()-选择性输入组件JRadioButtonJRadioButtonuRadioButtonRadioButton实现一个单选按钮,一般和实现一个单选按钮,一般和ButtonGroupButtonGroup对象结合,实现多中选一的目标。对象结合,实现多中选一的目标。JRadioButtonJRadioButton rdb1=new rdb1=new JRadioButtonJRadioButton(rdb1);(rdb1);JRadioButtonJRadioButton rdb2=new rdb2=new JRadioButtonJRadi
37、oButton(rdb2);(rdb2);JRadioButtonJRadioButton rdb3=new rdb3=new JRadioButtonJRadioButton(rdb3);(rdb3);/下面将三个按钮加入到一个组中,而剩余两个没有加入下面将三个按钮加入到一个组中,而剩余两个没有加入ButtonGroupButtonGroup bgbg=new=new ButtonGroupButtonGroup();();bg.addbg.add(rdb1);(rdb1);bg.addbg.add(rdb2);(rdb2);bg.addbg.add(rdb3);(rdb3);JRadioB
38、uttonJRadioButton rdb4=new rdb4=new JRadioButtonJRadioButton(rdb4);(rdb4);ButtonGroupButtonGroup只是对只是对JRadioButtonJRadioButton进进行了逻辑分组行了逻辑分组,本身不是一个组件类本身不是一个组件类 -添加菜单到窗口菜单栏并不被添加到内容窗格中,而是有自己菜单栏并不被添加到内容窗格中,而是有自己的固定位置,因此,添加菜单到窗口有自己的的固定位置,因此,添加菜单到窗口有自己的方法。方法。u首先,创建一个首先,创建一个JMenuBarJMenuBar菜单栏对象菜单栏对象u将创建的
39、菜单将创建的菜单JMenuJMenu对象按顺序追加到对象按顺序追加到JMenuBarJMenuBar对象中,对象中,u而菜单项而菜单项JMenuItemJMenuItem则一个个按顺序追加到对应则一个个按顺序追加到对应的的JMenuJMenu对象中,对象中,u最后将最后将JMenuBarJMenuBar对象设置为当前窗口的菜单栏。对象设置为当前窗口的菜单栏。JMenuBarJMenuBar mnubarmnubar=new=new JMenuBarJMenuBar();();JMenuJMenu mnuFirstmnuFirst=new =new JMenuJMenu(文件文件););mnub
40、ar.addmnubar.add(mnuFirstmnuFirst););JMenuItemJMenuItem itmAdditmAdd=new =new JMenuItemJMenuItem(添加添加););mnuFirst.addmnuFirst.add(itmAdditmAdd););mnuFirst.addSeparatormnuFirst.addSeparator();/();/增加菜单分隔符增加菜单分隔符 JMenuItemJMenuItem itmExititmExit=new =new JMenuItemJMenuItem(退出退出(E);E);mnuFirst.addmnuF
41、irst.add(itmExititmExit););itmExit.setMnemonicitmExit.setMnemonic(KeyEvent.VK_EKeyEvent.VK_E););itmExit.setAcceleratoritmExit.setAccelerator(KeyStroke.getKeyStrokeKeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_DOWN_MASKKeyEvent.VK_E,InputEvent.CTRL_DOWN_MASK););JMenuJMenu mnuSecpmdmnuSecpmd=ne
42、w =new JMenuJMenu(Help);(Help);mnubar.addmnubar.add(mnuSecpmdmnuSecpmd););/将将mnuBarmnuBar设置为当前窗口的菜单栏对象设置为当前窗口的菜单栏对象this.setJMenuBarthis.setJMenuBar(mnubarmnubar););-012435301524外观的管理与控制 -用户确实需要自己设置组件的大小和位置,则应取用户确实需要自己设置组件的大小和位置,则应取消该容器的布局管理器,方法为:消该容器的布局管理器,方法为:setLayout(null)但用户必须使用但用户必须使用setLocatio
43、n(),setSize(),setBounds()等方法为组件设置大小和位置,不过程等方法为组件设置大小和位置,不过程序将系统相关。序将系统相关。外观的管理与控制 -为了使生成的图形用户界面具有良好的平台无为了使生成的图形用户界面具有良好的平台无关性,关性,Java语言提供了布局管理器来管理组件在容语言提供了布局管理器来管理组件在容器中的布局,而不使用直接设置组件的位置和大小器中的布局,而不使用直接设置组件的位置和大小的方式。每个容器都要一个布局管理器,容器中组的方式。每个容器都要一个布局管理器,容器中组件的定位都由它来决定。当容器需要对某个组件进件的定位都由它来决定。当容器需要对某个组件进行
44、定位时,就会调用其对应的布局管理器。行定位时,就会调用其对应的布局管理器。this.setContentPane(new JPanel();this.setContentPane(new JPanel();外观的管理与控制 -在程序中安排组件的位置和大小时,应注意:在程序中安排组件的位置和大小时,应注意:容器中布局管理器负责各组件的大小和位置,用户容器中布局管理器负责各组件的大小和位置,用户无法在这种情况下设置组件的这些属性,如试图调用无法在这种情况下设置组件的这些属性,如试图调用setLocation(),setSize(),setBounds()等。等。外观的管理与控制 -布局管理器 布局
45、管理器布局管理器是是java.awtjava.awt包中提供的专门用于设置容器中包中提供的专门用于设置容器中组件排列方式的类,常用的有组件排列方式的类,常用的有BorderLayoutBorderLayout、FlowLayoutFlowLayout、GridLayoutGridLayout、BoxLayoutBoxLayout、CardLayoutCardLayout几种。几种。每一种容器都有一个默认的布局管理器,通过每一种容器都有一个默认的布局管理器,通过setLayoutsetLayout方法可以改变容器的布局方式。方法可以改变容器的布局方式。-边界布局举例边界布局举例public cl
46、ass BorLayDemo extends JFrame private JButton myButton1,myButton2,myButton3,myButton4,myButton5;public BorLayDemo()super(边界布局边界布局);setBounds(50,50,300,120);setLayout(new BorderLayout();/设置窗口为边界布局设置窗口为边界布局setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);myButton1=new JButton(东边按钮东边按钮);myButto
47、n2=new JButton(南边按钮南边按钮);myButton3=new JButton(西边按钮西边按钮);myButton4=new JButton(北边按钮北边按钮);myButton5=new JButton(中间按钮中间按钮);add(East,myButton1);/添加按钮到窗口指定方位添加按钮到窗口指定方位add(South,myButton2);add(West,myButton3);add(North,myButton4);add(Center,myButton5);public static void main(String args)BorLayDemo f=new
48、 BorLayDemo();-FlowLayoutFlowLayoutFlowLayoutu布局方式是将组件一排一排地依次放置,它自动调用组件的布局方式是将组件一排一排地依次放置,它自动调用组件的getPreferredSizegetPreferredSize()()方法,使用组件的最佳尺寸来显示组件。方法,使用组件的最佳尺寸来显示组件。u当容器被重新设置大小后,则布局也会随之发生改变:各组件当容器被重新设置大小后,则布局也会随之发生改变:各组件的大小不变,但相对位置会发生变化。它是的大小不变,但相对位置会发生变化。它是JPanelJPanel的默认布局的默认布局。构造方法构造方法uFlowL
49、ayoutFlowLayout()()u/居中对齐,默认的水平和垂直间隙是居中对齐,默认的水平和垂直间隙是 5 5 个单位。个单位。uFlowLayoutFlowLayout(intint align)align)u/它具有指定的对齐方式(它具有指定的对齐方式(FlowLayoutFlowLayout类声明的三个类常量类声明的三个类常量LEFTLEFT,RIGHTRIGHT,CENTERCENTER),默认的水平和垂直间隙是),默认的水平和垂直间隙是 5 5 个单位。个单位。uFlowLayoutFlowLayout(intint align,align,intint hgaphgap,int
50、int vgapvgap)u/创建一个新的流布局管理器,它具有指定的对齐方式以及指定的创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水平和垂直间隙。水平和垂直间隙。-流式布局举例流式布局举例public class FlowLayDemo extends JFrame private JButton myButton1,myButton2,myButton3,myButton4,myButton5;public FlowLayDemo()/FlowLayDemo类的构造方法类的构造方法 super(流式布局流式布局);setBounds(50,50,300,120);setLayou