第11章高级组件GUI设计.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 高级 组件 GUI 设计
- 资源描述:
-
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第11章 高级组件,GUI,设计,第11章 高级组件,GUI,设计,11.1 界面布局管理,11.2 键盘事件(,KeyEvent,),11.3,鼠标事件(,MouseEvent,),11.4,窗口与面板,11.5 菜单设计,11.6 对话框设计,习题11,11.1 界面布局管理,11.1.1,FlowLayout,java.,FlowLayout,类是,java.lang.Object,类的直接子类。,FlowLayout,的布局策略是将遵循这种布局策略的容器中的组件按照加入的先后顺序从左向右排列,当一行排满之后就转到下一行继续从左至右排列,每一行中的组件都居中排列。,FlowLayout,是,Applet,缺省使用的布局编辑策略。,FlowLayout,类有三个构造方法,分别是:,(1),FlowLayout,(),:,用于创建一个版面设定为居中对齐、各组件的水平及垂直间隔为,5,个像素点的,FlowLayout,类的对象。,(2),FlowLayout,(,int,align),:,用于创建一个,FlowLayout,类的对象,版面按给出的,align,值对齐,各组件的水平及垂直间隔为,5,个像素。,align,的值可以是,FlowLayout,.LEFT(,左对齐,),、,FlowLayout,.RIGHT(,右对齐,),、,FlowLayout,.CENTER(,居中对齐,),方式。,(3),FlowLayout,(,int,align,,,int hgap,,,int vgap,),:,用于创建一个既指定对齐方式,又指定组件间间隔的,FlowLayout,类的对象。参数,align,的作用及取值同上;参数,hgap,指定组件间的水平间隔;参数,vgap,指定各组件间的垂直间隔。间隔单位为像素点。,对于一个原本不使用,FlowLayout,布局编辑器的容器,若需要将其布局策略改为,FlowLayout,,,可以使用,setLayout,(new,FlowLayout,(),方法,该方法是所有容器的父类,Container,的方法,用于为容器设定布局编辑器。,11.1.2,BorderLayout,java.,BorderLayout,类是,java.lang.Object,类的直接子类。,BorderLayout,布局策略是把容器内的空间划分为东、西、南、北和中五个区域。这五个区域分别用字符串常量,East,、,West,、,South,、,North,和,Center,表示。向这个容器内每加入一个组件都应该指明把它放在容器的哪个区域中。分布在北部和南部区域的组件将横向扩展至占据整个容器的长度;分布在东部和西部的组件将伸展至占据容器剩余部分的全部宽度;最后剩余的部分将分配给位于中央的组件。如果某个区域没有分配组件,则其他组件可以占据它的空间。,BorderLayout,类有两个构造方法,分别是无参数的,BorderLayout,(),和带参数的,BorderLayout,(,int hgap,int vgap,),。,前者创建一个各组件间的水平间隔、垂直间隔都为,0,的,BorderLayout,类的对象;后者创建一个各组件间的水平间隔为,hgap,、,垂直间隔为,vgap,的,BorderLayout,类的对象。,【示例程序,c11_1.java】,使用,BorderLayout,布局策略在五个位置分别加入了四个按钮和一个标签,当点击按钮时,标签的文本就是按钮的标签的文本。,import,javax,.swing.*;,import java.,awt,.*;,import java.,awt,.event.*;,public class c11_1 extends,JApplet,implements,ActionListener,JButton,bt1=new,JButton,(,北部),bt2=new,JButton,(,西部),bt3=new,JButton,(,东部),bt4=new,JButton,(,南部);,JLabel,lb1=new,JLabel,(,中部);,Container cp=,getContentPane,();,public void init(),/,设置,BorderLayout,布局,组件间隔为11,cp.,setLayout,(new,BorderLayout,(11,11);,cp.add(North,bt1);/,将,bt1,放置于北区,bt1.,addActionListener,(this);,cp.add(West,bt2);/,将,bt2,放置于西区,bt2.,addActionListener,(this);,cp.add(East,bt3);/,将,bt3,放置于东区,bt3.,addActionListener,(this);,cp.add(South,bt4);/,将,bt4,放置于南区,bt4.,addActionListener,(this);,cp.add(Center,lb1);/,将,bt5,放置于中区,public void,actionPerformed,(,ActionEvent,e),if(e.,getSource,()=bt1)lb1.,setText,(,按钮1);,else if(e.,getSource,()=bt2)lb1.,setText,(,按钮2);,else if(e.,getSource,()=bt3)lb1.,setText,(,按钮3);,else lb1.,setText,(,按钮4);,图11.1 程序,c11_1,的运行结果,11.1.3,CardLayout,CardLayout,的版面布局方式是将每个组件看成一张卡片,如同扑克牌一样将组件堆叠起来,而显示在屏幕上的每次只能是最上面的一个组件,这个被显示的组件将占据所有的容器空间。用户可通过表11.1所示的方法选择使用其中的卡片。,CardLayout,类有两个构造方法,分别是,CardLayout,(),和,CardLayout,(,int hgap,int vgap,),。,前者使用默认,(,间隔为,0),方式创建一个,CardLayout,(),类对象;后者使用由,hgap,指定的水平间隔和由,vgap,指定的垂直间隔创建一个,CardLayout,(),类对象。,CardLayout,类的常用成员方法列于表,11.1,中。,表,11.1,CardLayout,类的常用成员方法,【示例程序,c11_2.java】,使用,CardLayout,的布局策略,在容器中放入三个按钮,显示第二个按钮。,import java.,awt,.*;,import,javax,.swing.*;,public class c11_2 extends,JApplet,JButton,bt1=new,JButton,(,按钮,A);,JButton,bt2=new,JButton,(,按钮,B);,JButton,bt3=new,JButton,(,按钮,C);,Container cp=,getContentPane,();,/,设置,CardLayout,布局,CardLayout,card=new,CardLayout,(20,20);,public void init(),cp.,setLayout,(card);,cp.add(a,bt1);,cp.add(b,bt2);cp.add(c,bt3);,card.next(cp);/,显示按钮,B,图11.2 程序,c11_2,的运行结果,11.1.4,GridLayout,如果界面上需要放置的组件较多,且这些组件的大小又基本一致时,例如计算器、遥控器的面板,使用,GridLayout,布局策略是最佳的选择。,GridLayout,的布局策略是把容器的空间划分为若干行、若干列的网格区域,而每个组件按添加的顺序从左向右、从上向下地占据这些网格。,GridLayout,类的三个构造方法如下:,(1),GridLayout,():,按默认(1行1列)方式创建一个,GridLayout,布局。,(2),GridLayout,(,int,rows,int,cols):,创建一个具有,rows,行、,cols,列的,GridLayout,布局。,(3),GridLayout,(,int,rows,int,cols,int hgap,int vgap,):,按指定的行数,rows、,列数,cols、,水平间隔,hgap,和垂直间隔,vgap,创建一个,GridLayout,布局。,【示例程序,c11_3.java】,使用,GridLayout,的布局,在容器中放入4个按钮。,import java.,awt,.*;,import,javax,.swing.*;,public class c11_3 extends,Japplet,Container cp=,getContentPane,();,public void init(),/,设置,GridLayout,布局,GridLayout myLayout,=new,GridLayout,(2,2,20,30);,cp.,setLayout,(,myLayout,);,cp.add(new,JButton,(,按钮,A);,cp.add(new,JButton,(,按钮,B);,cp.add(new,JButton,(,按钮,C);,cp.add(new,JButton,(,按钮,D);,图11.3 程序,c11_3,的运行结果,11.1.5,BoxLayout,BoxLayout,是,swing,所提供的布局管理器,它的继承关系如下:,java.lang.Object,javax,.swing.,BoxLayout,BoxLayout,只有两种排列方式,一种是水平,另一种是垂直。我们可以使用,BoxLayout,所提供的两个常量,X_AXIS、Y_AXIS,来指明组件在容器中是水平还是垂直排列的。,BoxLayout,类与,Box,类结合,可以提供多样化的布局。通常的做法是使用若干个,Box,容器,由于,Box,容器的默认布局是,BoxLayout,,,而且只能使用这个布局,因此,每一个,Box,容器中组件的排列方式也只能按水平或垂直方向排列。,1,BoxLayout,和,Box,的构造函数,创建,BoxLayout,类的对象的构造方法是:,BoxLayout,(Container target,int,axis),其中,,target,是容器对象;,axis,指明,target,中组件的排列方式,其值可为表示水平排列的,BoxLayout,.X_AXIS,,或为表示垂直排列的,BoxLayout,.Y_AXIS。,讲到,BoxLayout,,,我们不能不提到,Box,这个容器。,Box,这个容器默认的布局是,BoxLayout,,,而且只能使用这个布局,否则编译时就会产生错误。由于,BoxLayout,是以水平或垂直方式排列的,因此,当我们要创建一个,Box,容器时,就必须指定,Box,容器中组件的排列方式是水平还是垂直的。,Box,的构造函数为:,Box(,int,axis),Box,的构造函数中只有一个参数,axis,,用以指定,Box,中的组件是按水平还是按垂直方式排列的。,axis,的值可以用,BoxLayout,.X_AXIS,或,BoxLayout,.Y_AXIS,指定,也可使用,Box,类提供的两个方法,creatHorizontalBox,(),与,creatVerticalBox,(),来指定。,2,BoxLayout,类和,Box,类的常用成员方法,表11.2,BoxLayout,类常用的成员方法,表11.3,Box,类常用的成员方法,为方便布局管理,,Box,类还提供了4种透明组件,Glue、Strut、Rigid,和,Filler,,可以将这些透明组件插入其他组件的中间,使这些组件产生分开的效果。这4种透明组件的作用是:,Glue:,将,Glue,两边的组件挤到容器的两端。,Strut:,将,Strut,两端的组件按水平或垂直方向指定的大小分开。,Rigid:,可以设置二维的限制,将组件按水平或垂直方向指定的大小分开。,Filler:,不仅可以设置二维的限制,将组件按水平或垂直方向指定的大小分开,而且还可以设置最大、较佳、最小的长宽大小。,它们的具体用法请参阅示例程序,c11_4.java。,3使用,BoxLayout,时需要注意的事项,(1)当组件按,BoxLayout,布局排列好后,不管窗口缩小或放大都不会变动。,(2)当使用水平排列方式时,若放进去的组件不等高,则系统将会使所有的组件与最高组件等高。,(3)当放在同一行的组件超出容器的宽度时,系统不会自动换行,需要用户自行处理。,【示例程序,c11_4.java】,使用,BoxLayout,布局,将6个组件按结果要求排列。,import java.,awt,.*;,import java.,awt,.event.*;,import,javax,.swing.*;,public class c11_4 extends,JApplet,public void init(),Container cp=,getContentPane,();,Box,bBox,=Box.,createHorizontalBox,();/,设置,bBox,中的组件按水平方向排列,cp.add(,bBox,);/,将,bBox,容器添加到,cp,对象中,/,bBox,中放入,vBox1,容器,Box vBox1=Box.,createVerticalBox,();/,设置,bBox1,中的组件按垂直方向排列,JLabel,lb=new,JLabel,(,这是标签);,vBox1.add(lb);/,添加标签到,vBox1,中,JButton,bt1=new,JButton,(,这是按钮1);,bt1.,setMaximumSize,(new Dimension(110,200);/,设置按钮的最大长度,vBox1.add(bt1);/,添加按钮到,vBox1,中,bBox,.add(vBox1);/,添加,vBox1,到,bBox,中,/,bBox,中放入,vBox2,容器,Box vBox2=Box.,createVerticalBox,();,bBox,.add(vBox2);,JTextField,tf1=new,JTextField,(,这是文本框,11);,/设置文本框在容器中沿,X,方向居中对齐,tf1.,setAlignmentX,(Component.CENTER_ALIGNMENT);,tf1.,setMaximumSize,(new Dimension(150,50);,vBox2.add(tf1);,/vBox2,容器中放入,vBox2h,容器,Box vBox2h=Box.,createHorizontalBox,();/vBox2h,容器上的组件按水平方向排列,vBox2.add(vBox2h);,/vBox2h,容器中放入,vBox2h1,Box vBox2h1=Box.,createVerticalBox,();/vBox2h1,容器上的组件按垂直方向排列,/加入垂直透明组件,Strut,,间隔为20像素,vBox2h1.add(Box.,createVerticalStrut,(20);,vBox2h1.add(new,JTextArea,(,这是文本区域,15,11);,vBox2h1.add(Box.,createVerticalStrut,(20);,vBox2h.add(vBox2h1);,/vBox2h,容器中放入,vBox2h2,Box vBox2h2=Box.,createVerticalBox,();,vBox2h2.add(new,JButton,(,这是按钮2);,vBox2h2.add(Box.,createVerticalGlue,();/,加入垂直透明组件,Glue,,组件挤到两边,vBox2h2.add(new,JButton,(,这是按钮4);,vBox2h.add(vBox2h2);,图11.4 程序,c11_4,的运行结果,图,11.5,图形层次结构,从图11.5中可以看出:,bBox,容器是最底层容器,它上面放入两个容器,vBox1,和,vBox2。vBox1,容器中放入一个标签1组件和一个按钮1组件。,vBox2,容器中放入一个文本框组件和一个,vbox2h,容器。,vbox2h,容器中放入,vBox2h1,容器和,vBox2h2,容器。,vBox2h1,容器中放入一个文本区域组件。,vBox2h2,容器中放入一个按钮2组件和一个按钮4组件。,11.2 键盘事件(,KeyEvent,),当用户使用键盘进行操作时则会产生,KeyEvent,事件。处理,KeyEvent,事件的监听者对象是可以实现,KeyListener,接口的类,或者是继承,KeyAdapter,的子类。在,KeyListener,这个接口中有如下三个事件:,keyPressed,(,KeyEvent,e);,代表键盘按键被按下的事件。,keyReleased,(,KeyEvent,e);,代表键盘按键被放开的事件。,keyTyped,(,KeyEvent,e);,代表按键被敲击的事件。,KeyEvent,类中的常用方法有:,(1),public char,getKeyChar,(),方法,它返回引发键盘事件的按键对应的,Unicode,字符。如果这个按键没有,Unicode,字符与之对应,则返回,KeyEvent,类的一个静态常量,KeyEvent,.CHAR-UNDEFINED。,(2)public String,getKeyText,(),方法,它返回引发键盘事件的按键的文本内容。,【示例程序,c11_5.java】,键盘事件程序。,import java.,awt,.*;,import,javax,.swing.*;,import java.,awt,.event.*;,public class c11_5 extends,JApplet,String s,s1;,JLabel,lb1=new,JLabel,(,请按键盘);,JLabel,lb2=new,JLabel,(,复制结果);,JTextField,tf1=new,JTextField,(11);/,用来输入文字,JTextArea,tf2=new,JTextArea,(5,11);/,用来显示文字内容,Container cp=,getContentPane,();,FlowLayout,flow=new,FlowLayout,(,FlowLayout,.CENTER,5,5);,public void init(),cp.,setLayout,(flow);,cp.add(lb1);,cp.add(tf1);,cp.add(lb2);,cp.add(tf2);,tf1.,addKeyListener,(new,koLis,();,class,koLis,extends,KeyAdapter,public void,keyTyped,(,KeyEvent,e),s=tf1.,getText,()+e.,getKeyChar,();/,获取文本框的内容及键入的字符,if(e.,getKeyChar,()=n),/,若按回车键,则将文本框的内容送入文本域中,s1=tf2.,getText,()+s;,tf1.,setText,();,tf2.,setText,(s1);,图11.6,c11_5,运行结果,11.3 鼠标事件(,MouseEvent,),在图形用户界面中,鼠标主要用来进行选择、切换或绘画。当用户用鼠标进行交互操作时,会产生鼠标事件,MouseEvent,。,处理,MouseEvent,事件的监听者对象是可以实现,MouseListener,接口和,MouseMotionListener,接口的类,或者是继承,MouseAdapter,的子类。与,Mouse,有关的事件可分为两类:一类是,MouseListener,接口,共提供5种方法,主要针对鼠标的按键与位置作检测;另一类是,MouseMotionListener,接口,共提供2种方法,主要针对鼠标的坐标与拖动操作做处理。这些方法列于表11.4中。,表11.4,MouseEvent,事件及其监听者,表11.5,MouseEvent,类的常用成员方法,【示例程序,c11_6.java】,鼠标事件程序。,import java.,awt,.*;,import,javax,.swing.*;,import java.,awt,.event.*;,public class c11_6 extends,JApplet,int,x,y;,JLabel,lb1=new,JLabel,(X:),lb2=new,JLabel,(Y:),lb3=new,JLabel,();,JTextField,tf1=new,JTextField,(5),tf2=new,JTextField,(5);,Container cp=,getContentPane,();,FlowLayout,flow=new,FlowLayout,(,FlowLayout,.CENTER,5,5);,public void init(),cp.,setLayout,(flow);,cp.add(lb1);,cp.add(tf1);,cp.add(lb2);,cp.add(tf2);,cp.add(lb3);,addMouseListener,(new,mouseListener,();,addMouseMotionListener,(new,koLis,();,class,mouseListener,implements,MouseListener,public void,mouseClicked,(,MouseEvent,e),lb3.,setText,(,点击鼠标);,public void,mousePressed,(,MouseEvent,e),lb3.,setText,(,鼠标按钮按下);,public void,mouseEntered,(,MouseEvent,e),lb3.,setText,(,鼠标进入窗口);,public void,mouseExited,(,MouseEvent,e),lb3.,setText,(,鼠标不在窗口);,public void,mouseReleased,(,MouseEvent,e),lb3.,setText,(,鼠标按钮松开);,class,koLis,implements,MouseMotionListener,public void,mouseMoved,(,MouseEvent,e),x=e.,getX,();,y=e.,getY,();,tf1.,setText,(String.,valueOf,(x);,tf2.,setText,(String.,valueOf,(y);,public void,mouseDragged,(,MouseEvent,e),lb3.,setText,(,拖动鼠标);,图11.7 程序,c11_6,的运行结果,11.4 窗 口 与 面 板,11.4.1,JFrame,容器,JFrame,是,Java Application,程序的图形用户界面容器,是一个有边框的容器。,JFrame,类包含支持任何通用窗口特性的基本功能,如最小化窗口、移动窗口、重新设定窗口大小等。,JFrame,容器作为最底层容器,不能被其他容器所包含,但可以被其他容器创建并弹出成为独立的容器。,JFrame,类的继承关系如下:,java.lang.Object,java.,awt,.Component,java.,awt,.Container,java.,awt,.Window,java.,awt,.Frame,javax,.swing.,JFrame,使用,JFrame,容器需要注意以下几点:,(1)可以使用,JFrame,(),方法创建一个无标签的,JFrame,对象,也可以使用,JFrame,(String title),方法创建一个标签为,title,的,JFrame,对象,还可以使用专门的方法,getTitle,(),和,setTitle,(String),来获取或指定,Frame,的标题。,(2)使用,setSize,(,int,x,int,y),方法设置,JFrame,容器大小。,(3)创建的,JFrame,是不可见的,若要使其可见,则需要使用,show(),方法或给出实际参数为,true,的,setVisible,(,boolean,),方法。,(4)向,JFrame,中添加组件时,必须先取得,ContentPane,,,然后再使用,add(),方法把组件加入到此,ContentPane,中,而不能像,AWT,中的,Frame,那样直接调用,add(),方法。,(5),JFrame,类可以引发,WindowEvent,类代表的所有七种窗口事件(见表11.8)。,(6)每个,JFrame,在其右上角都有三个控制图标(如图11.8所示),分别代表最小化、最大化和关闭窗口的操作。其中,,JFrame,可自动完成窗口的最小化和最大化操作,而关闭窗口的操作不能通过点击关闭图标来实现,但可以使用下述三个办法之一来关闭窗口:,设置一个按钮,当用户点击此按钮时关闭窗口;,用,WINDOWS_CLOSING,事件做出响应,关闭窗口;,使用菜单命令。,无论使用哪一种办法,都需要用到关闭,JFrame,的,System.exit(0),方法。,【示例程序,c11_7.java】,创建两个窗口对象,点击第一个窗口中的按钮时打开第二个窗口。,import java.,awt,.*;,import,javax,.swing.*;,import java.,awt,.event.*;,public class c11_7 implements,ActionListener,public c11_7(),JFrame,f=new,JFrame,(,这是一个,JFrame,);/,创建,JFrame,对象,Container cp=f.,getContentPane,();/,创建,JFrame,的容器对象,JButton,bt1=new,JButton,(,请点击);,bt1.,addActionListener,(this);,cp.add(bt1);,f.pack();/,调整窗口,f.show();/,显示窗口,f.,addWindowListener,(new,WinLis,();,public void,actionPerformed,(,ActionEvent,e),JLabel,lb=new,JLabel,(,这是第二个窗口);,JFrame nf,=new,JFrame,();,Container cp1=,nf,.,getContentPane,();,nf,.,setTitle,(,这是一个新,JFrame,);,nf,.,setSize,(180,110);/,设置窗口大小,nf,.show();,cp1.add(lb);,nf,.,addWindowListener,(new,WinLis,();,public static void main(String,arg,),new c11_7();,class,WinLis,extends,WindowAdapter,public void,windowsClosing,(,WindowEvent,e),System.exit(0);,图11.8 程序,c11_7,的运行结果1,图11.9 程序,c11_7,的运行结果2,11.4.2 窗口事件(,WindowEvent,),从,c11_7.java,程序的运行结果可以看出,若删除窗口事件,则窗口无法关闭。我们可以利用,Java,语言提供的窗口事件,WindowEvent,来对窗口进行操作。,WindowEvent,类包含表11.6所列的几个具体窗口事件。,表11.6,WindowEvent,类包含的窗口事件,WindowEvent,类的主要方法有,getWindow,(),和,getSource,()。,这两个方法的区别是:,getWindow,(),方法返回引发当前,WindowEvent,事件的具体窗口,返回值是具体的,Window,对象;,getSource,(),方法返回的是相同的事件引用,其返回值的类型为,Object。,【示例程序,c11_8.java】,制作两个,JFrame,窗口,实现两个窗口的切换、关闭、最小化等操作。,import java.,awt,.*;,import,javax,.swing.*;,import,javax,.swing.,JFrame,;,import java.,awt,.event.*;,public class c11_8,JLabel,lb1=new,JLabel,(,这是第一个窗口);,JLabel,lb2=new,JLabel,(,这是第二个窗口);,public static void main(String,arg,),new c11_8();,public c11_8(),JFrame,f1=new,JFrame,();/,创建,JFrame,对象,JFrame,f2=new,JFrame,();,Container cp=f1.,getContentPane,();/,创建,JFrame,的容器对象,获得,ContentPane,Container cp1=f2.,getContentPane,();,f1.,setTitle,(JFrame1);,f2.,setTitle,(JFrame2);,f1.,setSize,(150,110);/,设置窗口大小,f2.,setSize,(150,110);,cp.add(lb1);,f1.show();/,设置窗口为可见,cp1.add(lb2);,f2.show();,f1.,addWindowListener,(new,WinLis,();,f2.,addWindowListener,(new,WinLis,();,class,WinLis,extends,WindowAdapter,public void,windowOpened,(,WindowEvent,e),/,打开窗口,public void,windowActivated,(,WindowEvent,e),/,将窗口设置成活动窗口,public void,windowDeactivated,(,WindowEvent,e),/,将窗口设置成非活动窗口,public void,windowClosing,(,WindowEvent,e),System.exit(0);/,窗口关闭,public void,windowIconified,(,WindowEvent,e),/,最小化窗口,图11.10 程序,c11_8,的运行结果,11.4.3,JPanel,容器,在设计用户界面时,为了更合理的安排各组件在窗口的位置,可以考虑将所需组件先排列在一个容器中,然后将其作为一个整体嵌入窗口。,Panel,和,JPanel,就是这样一类被称为面板的容器。它们是一类无边框的、不能被移动、放大、缩小或关闭的容器。,AWT,的,Panel,与,Swing,的,JPanel,的区别是:,JPanel,支持双缓冲(,Double Buffering),功能,在处理动画上较少发生画面闪烁的情况。,JPanel,类的继承关系如下:,java.lang.Object,java.,awt,.Component,java.,awt,.Container,javax,.swing.,JComponent,javax,.swing.,JPanel,不能把,JPanel,作为一个图形界面程序最底层的容器,也不能指明,JPanel,的大小。,JPanel,总是作为一个容器组件被加入到,JFrame,、,JApplet,等其他容器中,当然,,JPanel,也可以加入到,JPanel,容器中。,JPanel,的大小由包含在它里边的组件,包容它的那个容器的布局策略,以及该容器中的其他组件所决定。,表11.7,JPanel,类构造方法,【示例程序,c11_9.java】,设置两个面板容器,p1,和,p2,,点击,p1,容器中的按钮使,p2,容器的标签产生结果。,import java.,awt,.*;,import java.,awt,.event.*;,import,javax,.swing.*;,public class c11_9,public c11_9(),JFrame,f=new,JFrame,(,JPanelDemo,);,Container cp=f.,getContentPane,();,cp.,setLayout,(new,GridLayout,(2,1);,JLabel,lb=new,JLabel,3;/,创建标签数组,for(,int,i=0;ilb.length;i+)/,设置每个标签的属性,lbi=new,JLabel,(,标签+(,i+1),JLabel,.CENTER);,lbi.,setBackground,(Color.yellow);/,设置标签颜色,lbi.,setBorder,(,BorderFactory,.,createEtchedBorder,();/,设置标签边框,lbi.,setOpaque,(true);/,让组件变为不透明,使标签颜色显示出来,JPanel,pal1=new,JPanel,(new,GridLayout,(1,1);/,创建面板对象,pal1.add(lb0);/,加载第0个标签在面板上,JPanel,pal2=new,JPanel,(new,GridLayout,(1,2);,JPanel,pal3=new,JPanel,(new,BorderLayout,();,pal3.add(lb1,BorderLayout,.NORTH);,pal3.add(lb2,BorderLayout,.SOUTH);,pal3.add(new,JButton,(,中部),BorderLayout,.CENTER);,JPanel,pal4=new,JPanel,(new,FlowLayout,();,pal4.add(new,JTextArea,(,JTextArea,5,11);,pal2.add(pal3);,pal2.add(pal4);,cp.add(pal1);,cp.add(pal2);,f.pack();,f.show();,f.,addWindowListener,(new,WinLis,();,class,WinLis,extends,WindowAdapter,public void,windowClosing,(,WindowEvent,e),System.exit(0);,public static void main(String,arg,),new c11_9();,图11.11 程序,c11_9,的运行结果,程序说明:,该程序的最底层容器是,cp,容器,它上面放入了,pal1,容器和,pal2,容器。,pal1,容器中放入了一个标签1组件。,pal2,容器中放入,pal3,容器和,pal4,容器。,pal3,容器中放入一个标签2组件、一个按钮展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




第11章高级组件GUI设计.ppt



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/13219395.html