通过例子学习swing图形用户界面设计_第1页
通过例子学习swing图形用户界面设计_第2页
通过例子学习swing图形用户界面设计_第3页
通过例子学习swing图形用户界面设计_第4页
通过例子学习swing图形用户界面设计_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章

用Swing编写图形界面2用Swing设计图形界面的步骤设置窗口框架(创建Jframe子类)设置内容面板(创建容器对象)对面板进行布局加入图形组件监听用户操作响应用户操作,实现具体业务功能3Swing组件分类1)顶层容器:JFrame2)中间容器:JPanel

3)基本组件:实现人际交互的组件,如Jbutton,JComboBox,JList,JMenu,JSlider,JTextField。4框架JFrameSwing中,用JFrame类描述框架JFrame的常用构造方法有:

JFrame()JFrame(Stringtitle)//创建一个标题为title的框架5框架JFrameJFrame的常用成员方法:voidsetVisible(booleanb)//参数为true时设置框架可见voidsetSize(doublew,doubleh)//设置框架的宽和高voidsetLocation(intx,inty)//设置窗口左上角的坐标ContainergetContentPane()//返回内容面板voidsetDefaultCloseOperation(intoperation)//设置关闭窗口后的默认操作6框架JFrame继承JFrame定义一个新的框架类,并显示这个框架类的对象。importjavax.swing.JFrame;classEmptyFrameextendsJFrame{ publicEmptyFrame(Stringtitle){ super(title);//调用超类的构造方法

setSize(200,150); }}publicclassEx{ publicstaticvoidmain(String[]args){ EmptyFramef=newEmptyFrame("空的框架"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }}7在框架中添加组件JFrame包含一个叫内容面板(contentpane)的容器。向JFrame添加组件不是将组件添加到JFrame,而是添加到内容面板中向JFrame添加组件首先必须调用getContentPane()方法获得JFrame的内容面板内容面板是Container的对象,Container的add()方法将组件加入内容面板84在框架中添加组件在框架窗口中添加按钮组件,并在屏幕的中央显示框架classButtonFrameextendsJFrame{ ButtonFrame(){ super("按钮和框架"); JButtonjb=newJButton("OK");//创建按钮对象jb Containercon=getContentPane();//获取内容面板

con.add(jb);//将按钮对象jb加入内容面板

}}publicclassExample9_2{ publicstaticvoidmain(String[]args){ JFramebf=newButtonFrame();//超类变量引用子类对象

bf.setSize(200,150); bf.setLocation(400,300); bf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); bf.setVisible(true); }}9面板JPanelJPanel是中间容器,它不能在屏幕上独立显示,但可以容纳其它组件,然后作为一个整体放置在JFrame中

JPanel的常用构造方法和成员方法有:

JPanel()JPanel(LayoutManagerlayout)Componentadd(Componentcomp)//向面板添加组件,继承自Container类10面板JPanel把按钮加入面板,再把这个面板放在框架中。

classJPanelAppextendsJFrame{ JPanelApp(){ setTitle("使用JPanel");JPaneljp=newJPanel(); JButtonjb=newJButton("OK"); jp.add(jb);//将按钮加入面板

add(jp);//将面板加入框架窗口的内容面板

}}publicclassEx{ publicstaticvoidmain(String[]args){ JPanelAppf=newJPanelApp(); f.setSize(200,150); f.setLocation(400,300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }}11颜色ColorColor是类库中java.awt包中的类,它定义了13种表示标准颜色的static常量:

BLACKBLUECYANDARK_GRAYGRAYGREENLIGHT_GRAYMAGENTAORANGEPINKREDWHITEYELLOW12颜色Color除标准颜色外,还可以使用下列构造方法自定义颜色:

Color(intred,intgreen,intblue)Component类中定义了如下方法设置组件的背景色:

voidsetBackground(Colorc)136颜色Color显示一个空的框架窗口,框架的背景色设置成红色。publicclassExample9_4{ publicstaticvoidmain(String[]args){ JFramef=newJFrame();f.setTitle("红色背景"); f.setSize(200,150); f.setLocation(400,300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Containercon=f.getContentPane();//获取内容面板

con.setBackground(Color.RED);//设置背景色

f.setVisible(true); }}14布局管理器

在容器中的所有组件的布局(位置和大小)由布局管理器来控制,在java中提供了下面的几种布局管理器.FlowLayoutBorderlayoutGridLayoutCardLayoutGridBagLayout

15布局管理器BorderLayout是顶层容器(JFrame,JDialog,和JApplet

)的默认布局管理器。有五个位置组件:16

布局管理器

BorderLayout17布局管理ContainercontentPane=getContentPane();contentPane.setLayout(newBorderLayout());contentPane.add(newJButton("Button1(NORTH)"), BorderLayout.NORTH);contentPane.add(newJButton("2(CENTER)"), BorderLayout.CENTER);contentPane.add(newJButton("Button3(WEST)"), BorderLayout.WEST);contentPane.add(newJButton("Long-NamedButton4(SOUTH)"), BorderLayout.SOUTH);contentPane.add(newJButton("Button5(EAST)"), BorderLayout.EAST);18

布局管理器2.FlowLayout组件按照加入的先后循序从左向右排列,一行排满后之后就下转到下一行继续从左至右排列每一行中的组件都居中排列

19布局管理器2.FlowLayout20布局管理importjava.awt.*;importjavax.swing.*;publicclassFlowWindowextendsJFrame{publicFlowWindow(){ContainercontentPane=getContentPane();contentPane.setLayout(newFlowLayout());contentPane.add(newJButton("Button1"));contentPane.add(newJButton("2"));contentPane.add(newJButton("Button3"));contentPane.add(newJButton("Long-NamedButton4"));contentPane.add(newJButton("Button5"));}publicstaticvoidmain(Stringargs[]){FlowWindowwin=newFlowWindow();win.setTitle("FlowLayout");win.pack();win.setVisible(true);}}21布局管理器3.GridLayout基本布局策略是把容器的空间划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小区域中。所有的区域大小一样。组件按从左到右,从上到下的方法加入。用构造函数划分出网格的行数和列数,

newGridLayout(行数,列数)。

22布局管理器3.GridLayout23布局管理importjava.awt.*;importjavax.swing.*;publicclassGridWindowextendsJFrame{publicGridWindow(){ContainercontentPane=getContentPane();contentPane.setLayout(newGridLayout(3,2));contentPane.add(newJButton("Button1"));contentPane.add(newJButton("2"));contentPane.add(newJButton("Button3"));contentPane.add(newJButton("Long-NamedButton4"));contentPane.add(newJButton("Button5"));}

24事件处理事件:键盘、鼠标、系统状态改变;事件源:产生事件的组件;监听器:系统随时去监视用户对输入设备(键盘和鼠标)的操作;事件处理机制:监视到某个动作产生时,系统会去执行特定的事件。事件源注册:对象名.addActionListener(监听者对象)监听者实现:publicvoidactionPerformed(ActionEvente)ActionEvent事件注册触发事件调用并传递参数事件处理模型25事件处理机制

建立事件监听器的步骤引入系统事件类包,如importjava.awt.Event.*在方法中调用事件源对象的方法(如addActionListener),注册事件源对象的事件监听者,如btn.addActionListener(this)实现事件接口中的相关方法,(如actionPerformed),即加入代码以对所发生的事件作出处理。26图形组件JLabel是用来显示包含文字或图形的标签,用户不能编辑所显示的文字。构造函数:JLabel():生成JLabel对象。JLabel(Stringtext):生成包含文字的JLabel对象。JLabel(Stringtext,intalignment):生成包含文字的JLabel对象并指定其水平对齐的方式。JLabel(Stringtext,Iconicon,intalignment):生成包含图形和文字的JLabel对象,文字会显示在图形的后面。标签27图形组件voidsetText(Stringtext):定义该组件所能显示的文字。voidsetIcon(Iconicon):定义该组件所能显示的图形。voidsetHorizontalAlignment(intalignment):设置标记内容的水平对齐方式(LEFT,CENTER,RIGHT,LEADING和TRAILING)。voidsetVerticalAlignment(intalignment):设置标记内容的垂直对齐方式(TOP,CENTER和BOTTOM)。常用的方法28importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclasslabel{ publicstaticvoidmain(String[]args) { JFramef=newJFrame(); Containercontent=f.getContentPane(); JLabellabel1=newJLabel("Label1"); JLabellabel2=newJLabel("Label2");

label2.setHorizontalTextPosition(JLabel.LEFT); label2.setVerticalTextPosition(JLabel.BOTTOM); content.setLayout(newGridLayout(2,2)); content.add(label1); content.add(label2); f.setVisible(true); }}29CardLayout布局容器可以容纳多个组件,但同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”;创建CardLayout对象作为布局;

如:Mycard=newCardLayout();使用容器的setLayout()方法为容器设置布局;

如:con.setLayout(Mycard);30CardLayout布局调用容器的add()方法将组件加入容器;

如:con.add(组件)或add(组件代号,组件);CardLayout类的构造方法:CardLayout()创建间距为零的对象;CardLayout(inthgap,intvgap)创建带有水平hgap和垂直vgap间距的对象31SwingGUI组件JTexFieldJComboBoxJCheckBoxJButtonJRadioButtonJLabelJTexArea32按钮JButton类用来生成按钮,常用的构造函数如下:JButton():生成JButton对象。JButton(Iconicon):生成以图形表示的JButton对象。JButton(Stringtext):生成以文字表示的JButton对象。JButton(Stringtext,Iconicon):生成包含文字和图形的JButton对象。33例9-5importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classframeextendsJFrameimplementsActionListener{ inttimes; JButtonbutton1; JLabellabel1; publicframe() { super("ButtonExample"); Containercontent=getContentPane(); times=0; button1=newJButton("SayHello"); label1=newJLabel(); setBackground(Color.white); setLayout(newGridLayout(2,1));

button1.addActionListener(this);//为按钮添加事件监听器

content.add(button1); content.add(label1);

}

34例9-5 publicvoidactionPerformed(ActionEvente) { if(e.getSource()==button1) { times+=1; Stringname=newString("Hello,youhaveclickedthebutton"); name+=""+times+"times."; label1.setText(name); } } }publicclassButton{ publicstaticvoidmain(String[]args) { finalframef=newframe(); f.setBounds(100,100,300,300); f.setVisible(true);

}}35程序运行如图所示:按钮示例36文本域与文本区

文本域(JTextField)和文本区(JTextArea)可以用来接受用户输入的文本。文本域允许用户编辑单行的文本,而文本区则可以编辑多行文本。JTextField的构造函数如下:

JTextField():生成JTextField。

JTextField(intn):将文本域的大小设为n行。

JTextField(Stringtext):指定文本域的默认值为text。JTextField(Stringtext,intcols):设定文本域为cols行,并指定默认值。

37文本域与文本区常用方法publicvoidsetText(Strings);//设置文本框publicStringgetTetx();//获取文本框内容密码域(JPasswordField)是JTextField的子类,用来接收输入的密码:char[]getPassword()获取输入的口令chargetEchoChar()获取口令框显示字符voidsetEchoChar(charc)设置口令框中的显示字符。系统默认“*”38importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclasslabel{ publicstaticvoidmain(String[]args) { JFramef=newJFrame(); Containercontent=f.getContentPane();

JPanelpanel=newJPanel(); panel.setLayout(newGridLayout(2,2)); panel.add(newJLabel("UserName:")); panel.add(newJTextField(15)); panel.add(newJLabel("Password:")); panel.add(newJPasswordField(15));

content.add(panel); f.pack(); f.setVisible(true); }}39选择组件复选框JCheckBox常用构造方法有:

JCheckBox()JCheckBox(Stringtext)//text是文本

JCheckBox(Stringtext,booleanselected)

其中的boolean参数指定复选框的初始状态是选中还是未选中,默认取未选中状态

40选择组件JCheckBox常用的成员方法有:

voidsetSelected(booleanselected)//设置是否选中

booleanisSelected()//返回复选框当前状态41选择组件复选框被点击后其状态在选中和未选中之间改变,并产生两种事件对象,先触发ItemEvent事件,然后触发ActionEvent事件。ItemEvent的监听接口是ItemListener,这个接口中只有一个响应ItemEvent事件的方法:

publicvoiditemStateChanged(ItemEvente)ItemEvent的下列方法可以返回产生该事件的事件源对象名称:

ObjectgetSource()42例JFrame中放置一个标签和控制标签字体的3个复选框,通过这三个复选框控制标签文本的字体

43classJCeckBoxDemo

extendsJFrameimplementsItemListener

{ JCheckBoxjc1,jc2,jc3; JLabeljl;

Fontfont; JCeckBoxDemo() { jc1=newJCheckBox("斜体"); jc2=newJCheckBox("粗体"); jc3=newJCheckBox("大体"); JPaneljp=newJPanel(); jp.add(jc1); jp.add(jc2); jp.add(jc3); jl=newJLabel("ThisisaJCeckBoxDemo!"); font=newFont("Serif",Font.PLAIN,14);

jl.setFont(font);//设置标签初始字体

add(jl); add(jp,BorderLayout.SOUTH);

jc1.addItemListener(this); jc2.addItemListener(this); jc3.addItemListener(this); }44//复选框状态改变后的响应程序publicvoiditemStateChanged(ItemEvente){intstyle=0;intsize;if(jc1.isSelected()) style=Font.ITALIC;if(jc2.isSelected()) style=style+Font.BOLD;if(style==0) style=Font.PLAIN;if(jc3.isSelected()) size=20;else size=14;font=newFont("Serif",style,size);jl.setFont(font);//重新设置字体}}45publicclasstest{ publicstaticvoidmain(String[]args) { JCeckBoxDemof=newJCeckBoxDemo(); f.setTitle("JCheckBoxDemo"); f.setSize(250,180); f.setLocation(400,300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }}46选择组件单选按钮JRadioButton常用的构造方法有:

JRadioButton()JRadioButton(Stringtext)//text是单选按钮的文本

JRadioButton(Stringtext,booleanselected)JRadioButton(Stringtext,Iconimage,booleanselected)

其中的boolean参数指定单选按钮的初始状态是选中还是未选中,默认是未选中状态

47选择组件JRadioButton常用的成员方法有:

voidsetSelected(booleanselected)//设置是否选中

booleanisSelected()//返回单选按钮当前状态48选择组件与JRadioButton紧密相关的一个类是按钮组ButtonGroup同一个ButtonGroup中只能有一个单选按钮处于选中状态。如果一个窗口中有几组单选按钮,每组必须新建一个ButtonGroup对象,并将该组所有单选按钮加入这个按钮组,才能确保各组的选择互不干扰

JRadioButtonjb1,jb1;jb1=newJRadioButton(“男”);jb2=newJRadioButton(“女”);

ButtonGroupbg=newButtonGroup();bg.add(jb1);//把单选按钮加入按钮组

bg.add(jb2);//jb1和jb2在同一个按钮组中,只能有一个处于选中状态。49例:用单选按钮控制标签的字体大小和颜色50classJRadioButtonDemoextendsJFrameimplementsActionListener{ JRadioButtonjf1,jf2,jf3; JRadioButtonjc1,jc2,jc3; JLabeljL; JRadioButtonDemo(){ JLabeljfL=newJLabel("字体大小:"); jf1=newJRadioButton("小号"); jf2=newJRadioButton("中号",true);//设置初始状态为选中

jf3=newJRadioButton("大号"); ButtonGroupbg1=newButtonGroup();//bg1控制字体大小

bg1.add(jf1); bg1.add(jf2); bg1.add(jf3); JPaneljp1=newJPanel(newGridLayout(1,4)); jp1.add(jfL); jp1.add(jf1); jp1.add(jf2); jp1.add(jf3);

jf1.addActionListener(this); jf2.addActionListener(this); jf3.addActionListener(this);51ButtonGroupbg2=newButtonGroup();//bg2控制字体颜色bg2.add(jc1);bg2.add(jc2);bg2.add(jc3);JPaneljp2=newJPanel(newGridLayout(1,4));jp2.add(jcL);jp2.add(jc1);jp2.add(jc2);jp2.add(jc3);jc1.addActionListener(this);jc2.addActionListener(this);jc3.addActionListener(this);jL=newJLabel("JavaLanguage!");jL.setFont(newFont("Serif",Font.PLAIN,20));add(jL);add(jp1,BorderLayout.NORTH);add(jp2,BorderLayout.SOUTH);}52//单选按钮状态改变后的响应程序publicvoidactionPerformed(ActionEvente){//改变字体大小if(e.getSource()==jf1)

jL.setFont(newFont("Serif",Font.PLAIN,10));elseif(e.getSource()==jf2)

jL.setFont(newFont("Serif",Font.PLAIN,20));elseif(e.getSource()==jf3)

jL.setFont(newFont("Serif",Font.PLAIN,30));//改变颜色if(e.getSource()==jc1)

jL.setForeground(Color.RED);elseif(e.getSource()==jc2)

jL.setForeground(Color.GREEN);elseif(e.getSource()==jc3)

jL.setForeground(Color.BLUE);}}53选择组件组合框JComboBox常用的构造方法和成员方法有:

JComboBox()//创建一个空组合框

JComboBox(Object[]items)//创建一个包含指定数组元素的组合框

voidaddItem(Objectitem)//添加项目到组合框

ObjectgetItemAt(intindex)//返回指定序号的项目

intgetSeletedIndex()//返回选中的项目序号

ObjectgetSeletedItem()//返回选中的项目54classJComboBoxDemoextendsJFrameimplementsItemListener{ JComboBoxjcb; JComboBoxDemo(){ Stringitems[]={"请选择颜色","红","橙","黄"}; jcb=newJComboBox(items);//新建初始有三个选项的组合框

jcb.addItem("绿");//向组合框添加新选项

jcb.addItem("蓝"); add(jcb,BorderLayout.NORTH); jcb.addItemListener(this);}//选中JComboBox中的选项的响应程序public

voiditemStateChanged(ItemEvente){ intindex=jcb.getSelectedIndex(); Colorcolor=Color.WHITE;55switch(index){case1:color=Color.RED;break;case2:color=Color.ORANGE;break;case3:color=Color.YELLOW;break;case4:color=Color.GREEN;break;case5:color=Color.BLUE;break; } Containercon=getContentPane();//获取框架窗口的内容面板

con.setBackground(color);//改变背景色}}56菜单2-1显示一个项目列表,指明用户可以执行的各项操作

文件编辑格式帮助字体段落项目符号和编号背景色红色绿色黑色菜单子菜单菜单项57JMenuBar类2-1只要选中JMenuItem,就会产生通过重写actionPerformed()方法进行处理的ActionEventJMenuBar文件编辑格式帮助新建打开关闭JMenuJMenuItem58菜单的构建(1)用类JMenuBar创建菜单条利用JMenuBar()构造方法创建,例如:JMenuBar

aMenuBar=newJMenuBar();(2)用类JMenu创建菜单用JMenu的构造方法来创建菜单,构造方法为:publicJMenu(Strings)用字符串s作为文本来构造菜单;例如:JMenuaMenu=newJMenu(“文件”);59(3)用类JMenuItem创建菜单项类JMenuItem的构造方法:PublicJMenuItem(Stringtext)创建一个具有指定文本的菜单项;例如:JMenuItemaMenuItem=newJMenuItem(“新建”);60创建菜单(续)(4)将菜单项加入到菜单中,将菜单加入到菜单条中;例如:aMenuBar.add(aMenu);aMenuBar.add(aMenuItem);向菜单添加分隔线:addSeparator()(5)将菜单条加入容器中publicvoidsetJMenuBar(JMenuBarmenubar)(6)处理菜单项选择事件监听菜单项ActionEvent事件。61classMenuDemoextendsJFrameimplementsActionListener{JMenuItemjm1,jm2,jm3,jm4,jm5;JTextFieldjt1,jt2,jt3;MenuDemo(){JMenuBarmb=newJMenuBar();this.setJMenuBar(mb);JMenum1=newJMenu("运算");JMenum2=newJMenu("程序");mb.add(m1);mb.add(m2);jm1=newJMenuItem("加");jm2=newJMenuItem("减");jm3=newJMenuItem("乘");jm4=newJMenuItem("除");jm5=newJMenuItem("终止");m1.add(jm1);m1.add(jm2);m1.add(jm3);m1.add(jm4);m2.add(jm5);62jm1.addActionListener(this);jm2.addActionListener(this);jm3.addActionListener(this);jm4.addActionListener(this);jm5.addActionListener(this);jt3=newJTextField(10);this.getContentPane().add(jt3); }public

voidactionPerformed(ActionEvente){if(e.getSource()==jm5)System.exit(0);if(e.getSource()==jm1)jt3.setText("进行加法运算");

if(e.getSource()==jm2)jt3.setText("进行减法运算");if(e.getSource()==jm3)jt3.setText("进行乘法运算");if(e.getSource()==jm4)jt3.setText("进行除法运算"); }}63工具栏Swing使用JToolBar作为存放工具栏组件的容器,工具栏中的组件通常是图标形式显示的按钮。JToolBar常用的构造方法和成员方法有:

JToolBar()

add(Componentcomp)//增加组件到工具栏

addSeparator()//在工具栏末尾添加一个分隔符645工具栏工具栏上的组件调用下列方法可以为该命令设置提示信息:

setToolTipText(Stringtext)例:工具栏中存放四个带图标按钮代表四种软件产品,光标停留在按钮上,显示这个按纽表示何种软件,点击按钮,由标签文本解释这种软件的作用65classToolBarDemoextendsJFrameimplementsActionListener{JButtonb1,b2,b3,b4;JLabeljl;ToolBarDemo(){Iconi1=newImageIcon("images/excel.gif");Iconi2=newImageIcon("images/pdf.gif");Iconi3=newImageIcon("images/ppt.gif");Iconi4=newImageIcon("images/word.gif");b1=newJButton(i1);//创建带图标的按钮b2=newJButton(i2);b3=newJButton(i3);b4=newJButton(i4);JToolBartb=newJToolBar("改变标签");tb.add(b1);b1.setToolTipText("excel的图标");//设置按钮命令提示tb.add(b2);b2.setToolTipText("pdf的图标");tb.add(b3);b3.setToolTipText("ppt的图标");tb.add(b4);b4.setToolTipText("word的图标");add(tb,BorderLayout.NORTH);jl=newJLabel("请点击工具栏上的按钮!",SwingConstants.CENTER);add(jl);b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);b4.addActionListener(this);}66public

voidactionPerformed(ActionEvente){Strings=null;Stringpic=null

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论