第3章 SWING界面设计_第1页
第3章 SWING界面设计_第2页
第3章 SWING界面设计_第3页
第3章 SWING界面设计_第4页
第3章 SWING界面设计_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

第三章Swing界面设计课程目标Swing简介Swing常用的控件(JButton、JLabel、JTextFiled、JComboBox)对话框(消息、警告、确认、输入对话框)文件选择对话框课程定位swing简介Swing类Swing类是一组类,它提供比AWT标准组件更强大和更灵活的功能。除了我们已经熟悉的组件如按钮、复选框和标签外,Swing类还提供了许多新的组件,如选项卡窗格、滚动窗格、树、表格等。在详细介绍Swing类之前我们先体会一下Swing类同AWT类的不同,我们先来运行一下JDK中DEMO里的SwingSet2.jar,位于Java的JDK安装目录jdk1.5.0\demo\jfc\SwingSet2下。运行后如图所示:演示Swing类的层次结构在javax.swing包中,定义了两种类型的组件:顶层容器(JFrame,JApplet,JDialog和JWindow)和轻量级组件。Swing组件都是AWT中Container类的直接子类和间接子类。

java.awt.Component-java.awt.Container-java.awt.Window-java.awt.Frame-javax.swing.JFrame-javax.Dialog-javax.swing.JDialog-javax.swing.JWindow-java.awt.Applet-javax.swing.JApplet-javax.swing.Box-javax.swing.Jcomponet Javax.swing包是Swing提供的最大包,它包含将近100个类和25个接口,几乎所有的Swing组件都在swing包中。Swing程序结构Swing类的程序设计一般可按照下列流程来进行:(1)引入Swing包(2)选择“外观和感觉”(3)设置顶层容器(4)设置按钮和标签(5)向容器中添加组件(6)在组件周围添加边界(7)进行事件处理流程JFrame与FrameJFrame是在Swing中经常使用到的组件,大家可以把它看成是最底层的容器。这个容器里面可以装载各种Swing的控件类(例如JLabel、JButton等等),也可以装载其他的容器。至于如何摆放这些控件和容器,Swing的解决办法和AWT是一样的,都应用了一套相同的版面管理器。由此可以看出Swing生成界面的方法与AWT生成界面的方法是大同小异的。JFrame类继承了Frame类,所以JFrame的功能要比Frame的功能多得多。常用控件上一节中我们简单介绍了Swing的初步知识,下面我们详细介绍Swing中的组件。 Swing中的常用组件如下表所示:组件类名称功能JButton按钮用来进行点击触发事件,实现具体操作JLabel标签放置提示性的图片或文字JTextField文本域支持单行文本输入JTextArea文本区支持多行文本输入JRadioButton单选框支持单项选择JCheckbox复选框支持多项选择JList列表框列出所有的选项进行选择JComboBox选择框列出所有的选项进行选择,并且支持自定义选项按钮(JButton)按钮在窗体界面程序设计中是最常用的控件,Swing中提供以下的构造函数来建立一个按钮对象: JButton() 建立一个按钮JButton(Iconicon) 建立一个有图像的按钮JButton(Stringtext) 建立一个有文字标签的按钮JButton(Stringtext,Iconicon) 建立一个有图像和文字的按钮JButton常用的方法如下: addActionListener(ActionListenerI) 在按钮上添加事件监听器 grabFocus() 请求焦点 setEnable(booleanb) 设置按钮是否可用 setVisible(booleanb) 设置按钮是否可见示例

importjava.awt.*; importjavax.swing.*; publicclassJButtonAppextendsJFrame{ Containercon=this.getContentPane();

JButtonbutton1=newJButton("按钮一");

JButtonbutton2=newJButton("按钮二");

JButtonbutton3=newJButton("按钮三"); publicJButtonApp(){

super("JButton示例");

con.setLayout(new

FlowLayout()); button1.setEnabled(false); button2.setVisible(false); con.add(button1); con.add(button2); con.add(button3);

this.pack();

this.show(); } publicstaticvoidmain(String[]args){ newJButtonApp(); } }标签(JLabel)这个组件主要用来放置提示性的文本或图形。以下是JLabel类的构造函数和常用方法。构造函数:

JLabel() 建立一个空白的标签组件。 JLabel(Iconimage) 建立一个含有图标的标签组件,默认排列方式为CENTER。 JLabel(Iconimage,inthorizontalAlignment) 建立一个含有图标的标签组件,并指定其排列方式。 JLabel(Stringtext) 建立一个含有文字的标签组件,默认排列方式为LEFT。 JLabel(Stringtext,inthorizontalAlignment) 建立一个含有文字的标签组件,并指定其排列方式。 JLabel(Stringtext,Iconicon,inthorizontalAlignment) 建立一个含有文字和图标的标签组件,并指定其排列方式。Jlabel的常用方法setHorizontalAlignment(intalignment) 设置标签内文字或图像的水平位置。setHorizontalTextPosition(inttextPosition) 设置标签内文字相对于图像的水平位置。setIcon(Iconicon) 设置标签内的图像。setIconTextGap(inticonTextGap) 设置标签内文字与图像的间距。setText(Stringtext) 设置标签内的文字。setVerticalAlignment(intalignment) 设置标签内文字或图像的垂直位置。setVerticalTextPosition(inttextPosition) 设置标签内文字相对于图像的垂直位置。示例

importjava.awt.*; importjavax.swing.*; publicclassJLabelAppextendsJFrame{ Containercon=this.getContentPane();

JLabellabel1=newJLabel("第一个标签");

JLabellabel2=newJLabel("第二个标签");

JLabellabel3=newJLabel("第三个标签");

publicJLabelApp(){ super("JLabel示例");

con.setLayout(newGridLayout(1,3)); label1.setHorizontalAlignment(JLabel.RIGHT); label2.setVerticalAlignment(JLabel.BOTTOM); con.add(label1); con.add(label2); con.add(label3); this.setSize(300,200);

this.show(); } publicstaticvoidmain(String[]args){ newJLabelApp(); } }文本域(JTextField)JTextField是一种单行文本输入组件。构造函数:JTextField() 建立一个文本域。JTextField(Documentdoc,Stringtext,intcolumns) 使用指定的文件存储模式建立一个文本域,并且设置其 初始字符串和字段长度。JTextField(intcolumns) 建立一个文本域,并设置其初始字段长度。JTextField(Stringtext) 建立一个文本域,并设置其初始字符串。JTextField(Stringtext,intcolumns) 建立一个文本域,并设置其初始字符串和字段长度。JTextField的常用方法setColumns(intcolumns) 设置文本域的字段长度setEditable(booleanb) 设置文本域是否可编辑setFont(Fontfont) 设置文本域内文本字体setText(Stringtext) 设置文本域的字符串JTextField示例

importjava.awt.*; importjavax.swing.*; publicclassJTextFieldAppextendsJFrame{ Containercon=this.getContentPane();

JTextFieldtextField1=newJTextField();

JTextFieldtextField2=newJTextField("第二个文本框");

JTextFieldtextField3=newJTextField("第三个文本框",10); publicJTextFieldApp(){

super("JTextField示例");

con.setLayout(new

FlowLayout()); textField1.setColumns(10); textField2.setEditable(false); con.add(textField1); con.add(textField2); con.add(textField3);

this.pack();

this.show(); } publicstaticvoidmain(String[]args){ newJTextFieldApp(); } }选择框(JComboBox)JComboBox组件一般被称为下拉式列表框,它可以让用户浏览一系列的选项并选出或自己输入想要的值。JComboBox的构造方法和常用的使用方法如下:构造方法: JComboBox() 建立一个新的JComboBox组件 JComboBox(ComboBoxModelaModel) 利用ComboBoxModel建立一个新的JComboBox组件 JComboBox(Object[]items) 利用Array数组对象建立一个新的JComboBox组件 JComboBox(Vectoritems) 利用Vector矢量集对象建立一个新的JComboBox组件JComboBox常用的方法: voidaddItem(Objectobj) 将对象obj添加到下拉列表框显示的项目中。intgetItemCount() 返回下拉列表框的项目的总数。ObjectgetSelectedItem() 返回当前选中的项目。voidremoveAllItems() 移除下拉列表框中所有的项目。voidremoveItemAt(intindex) 移除项目索引值为index的项目。voidsetEditable(booleanb) 设置下拉列表框是否可编辑。voidsetSelectedIndex(intindex) 设置索引值为index的项目的状态为已选中。示例

importjava.awt.*; importjavax.swing.*; publicclassJComboBoxAppextendsJFrame{

JComboBoxyearBox1=newJComboBox();

JComboBoxyearBox2=newJComboBox();

JComboBoxmonthBox1=newJComboBox();

JComboBoxmonthBox2=newJComboBox();

JPanelpanel=newJPanel();

JLabel

startDate=newJLabel("开始日期");

JLabel

endDate=newJLabel("终止日期");

publicJComboBoxApp(){

super("JComboBox示例");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.add(startDate);

for(inti=2000;i<=2008;i++) yearBox1.addItem(i+"");

for(inti=1;i<31;i++) monthBox1.addItem(i+""); panel.add(yearBox1); panel.add(monthBox1);

panel.add(endDate);

for(inti=2000;i<=2008;i++) yearBox2.addItem(i+"");

for(inti=1;i<31;i++) monthBox2.addItem(i+""); panel.add(yearBox2); panel.add(monthBox2); this.setSize(180,110);

this.setContentPane(panel);

this.show(); } publicstaticvoidmain(String

args[]){ newJComboBoxApp(); } }对话框在Windows平台下用MessageBox来实现和用户的交互功能,在JAVA中也有同样的类来实现这样的功能,利用Swing中提供的JOptionPane类。四个标准对话框如下:MessageDialog(消息对话框) 用来显示信息给用户。ConfirmDialog(确认对话框) 提出问题,然后由用户自己来 确认(按"Yes"或"No"按钮)InputDialog(输入对话框) 提示输入文本。OptionDialog(选项对话框) 组合其它三个对话框类型。消息对话框消息对话框是一个简单的显示消息的窗口,只是给用户提供提示信息。如图所示消息对话框:消息对话框可以通过调用JOptionPane类的showMessageDialog(Compont,Object)方法来创建,参数是父组件和字符串(或者组件、显示的图标)。如以下语句创建一个显示简单字符的消息对话框: JOptionPane.showMessagDialog(null,”WelcomeToQinghuaIT…”);还可以使用showMessageDialog(Component,Object,String,int)方法来创建一个显示警告消息的对话框,可以自己设置想要显示的消息对话框的标题。用法同showInputDialog()方法,参数相同但无返回值。如以下语句创建一个消息输入对话框: JOptionPane.showMessagDialog(null,”文件被删除”,”删除警告”,JOptionPane.WARNING_MESSAGE);确认对话框创建确认对话框的最简单方法就是调用showConfirmDialog(Component,Object)方法,参数意义同消息对话框中的参数相同。 不同的是该方法返回一个整数,JOptionPane的三个属性:YES_OPTIONNO_OPTIONCANCEL_OPTION示例

importjava.awt.*; importjavax.swing.*; importjava.awt.event.*; importjava.util.EventListener; publicclassMessageDialogAppextendsJFrameimplementsActionListener{ JButtonbutton1=newJButton("显示消息对话框一"); JButtonbutton2=newJButton("显示消息对话框二"); publicMessageDialogApp(){ super("MessageDialog示例"); this.setLayout(newFlowLayout()); button1.addActionListener(this);

button2.addActionListener(this); this.add(button1); this.add(button2); this.setSize(180,160);

this.show(); } publicstaticvoidmain(String

args[]){ newMessageDialogApp(); } publicvoidactionPerformed(ActionEvente){

if(e.getSource()==button1){

JOptionPane.showMessageDialog(null,"WelcomeToQinghuaIT..."); }

if(e.getSource()==button2){

JOptionPane.showMessageDialog(null,"出现错误", "错误警告",JOptionPane.WARNING_MESSAGE); } } }输入对话框输入对话框提出一个问题,并使用文本域来存储响应。创建输入对话框的最简单方法就是调用showInoutDialog(ComponertObject)方法,参数和消息对话框中的参数相同。调用输入对话框方法返回一个表示用户响应的字符串。如以下语句创建了一个简单的输入对话框:

StringinputText=IOptionPane.showInputDialog(null,“请输入你的姓名:”);示例

importjava.awt.*; importjavax.swing.*; importjava.awt.event.*; importjava.awt.event.ActionListener; importjava.util.EventListener; publicclassInputDialogAppextendsJFrameimplementsActionListener{

JButtonbutton1=newJButton("输入你的姓名");

JLabellabel=newJLabel("你的姓名是:"); publicInputDialogApp(){

super("InputDialog示例");

this.setLayout(new

FlowLayout()); button1.addActionListener(this); this.add(button1);

this.add(label); this.setSize(200,120);

this.show(); } publicstaticvoidmain(String

args[]){ newInputDialogApp(); } publicvoidactionPerformed(ActionEvente){

if(e.getSource()==button1){ StringinputText=JOptionPane.showInputDialog(this,"你的姓名是:");

this.label.setText("你的姓名是:"+inputText); } } }对话框的应用对话框就是用来和用户进行交互的,不同的对话框,代表着与用户交互的不同方式。添加代码片段就可以实现和用户交互,从而大大的丰富了程序的适用性。比如做个类似的备忘程序,在某一时间提醒用户进行某一操作,就可以用上面讲到的对话框来实现。文件选择对话框文件选择对话框“JFileChooser”用来引用文件到程序中进行查看、修改等其他操作,“JFileChooser”内建有“打开”,“存储”两种对话框,也可以自己定义其他种类的对话框。 JFileChooser有六个构造函数来生成JFilerChooser对象,常用的有两个: JFileChooser() 构造一个指向用户默认目录的JFileChooser。JFileChooser(FilecurrentDirectory) 使用给定的File作为路径来构造一个JFileChooser。JFileChooser常用的方法showOpenDialog(Componentparent)弹出一个"OpenFile"文件选择器对话框。showSaveDialog(Componentparent)弹出一个"SaveFile"文件选择器对话框。getCurrentDirectory() 返回当前目录。getName(Filef) 返回文件名。getSelectedFile() 返回选中的文件。setFileFilter(FileFilterfilter) 设置当前文件过滤器。setFileSelectionMode(intmode) 设置JFileChooser,以允许用户只选择文件、 只选择目录,或者可选择文件和目录isMultiSelectionEnabled() 如果可以选择多个文件,则返回true。isTraversable(Filef) 如果可以返回该文件(目录),则返回true。setDialogType(intdialogType) 设置此对话框的类型。setDialogTitle(Stringtitle)设置显示在JFileChooser窗口标题栏的字符串。JFileChooser常用的字段OPEN_DIALOG:指示JFileChooser支持“Open”文件操作的类型值SAVE_DIALOG:指示JFileChooser支持“Save”文件操作的类型值FILES_ONLY: 指示仅显示文件DIRECTORIES_ONLY: 指示仅显示目录FILES_AND_DIRECTORIES: 指示显示文件和目录下面的语句可以弹出一个针对用户主目录的打开文件选择器,并设置文件过滤器使只显示目录中的.jpg格式和.gjf格式的图像文件。

示例

JFileChooserchooser=newJFileChooser();

ExampleFileFilterfilter=newExampleFileFilter();

filter.addExtension("jpg");

filter.addExtension("gif");

filter.setDescription("JPG&GIFImages");

chooser.setFileFilter(filter);

chooser.setDialogType(JFileChooser.OPEN_DIALOG);

int

returnVal=chooser.showOpenDialog(parent);

if(returnVal==JFileChooser.APPROVE_OPTION) {

System.out.println("Youchosetoopenthisfile:"+

chooser.getSelectedFile().getName()); }//ExampleFileFilter类是JDK内的例子,在demo/jfc目录下,请自己参考。本章总结SwingSwing常用的控件(JButton、JLabel、JTextFiled、JComboBox)对话框(消息、警告、确认、输入对话框)文件选择对话框动手实践:图片浏览器图形处理的应用图片浏览器目标使用FileChooser文件选择对话框选择图片目录,将目录下的图片文件名在选择框中显示当选择不同的文件名时,窗体中将显示出对应的图片,以实现图片浏览的功能。本程序启动后,出现图片浏览器的窗体界面,运行效果如所示:目标点击“请选择目录”按钮,弹出“打开”文件对话框此处我们选择一个有图片的目录,点击“打开”按钮。如果此目录下存在“jpg”或者“gif”格式的图片,则窗体正中会出现一幅图片。运行效果如图所示:选择下拉框中此时会出现所有此目录下的jpg和gif格式的图片名字,再选择不同的文件名字就可以浏览该目录下的图片了。方法(1)用户可以选择或输入图片目录,目录中的图片名加入到JComboBox里。(2)用户选择下拉框里的文件名后,可以在窗体的面板上显示该图片。(1)建立面板类显示图片(1)首先我们要做一个继承JPanel的面板类,用来在该面板居中绘制显示图片。参考代码如下:

importjavax.swing.*; importjava.awt.*; classPicPanelextendsJPanel{

ImageIconimage;

int

startX; //图片在该JPanel中绘制的起始点

int

startY;

int

imageH; //图像宽和高

int

imageW; publicPicPanel(){ image=null; } publicvoidsetImg(ImageIcon

img){

this.image=img; }

publicvoidpaint(Graphicsg){

super.paint(g);//这句会防止绘图面板出现当前图形

if(this.image!=null){

imageH=this.image.getIconHeight();

imageW=this.image.getIconWidth();

startX=this.getWidth()/2-imageW/2;

startY=this.getHeight()/2-imageH/2;

g.drawImage(this.image.getImage(),startX,startY,this);//使得图片居中显示

} } }(2)总体界面设计(2)有了绘图面板之后,下面我们设计窗体,在窗体中添加一个JPanel存放JButton、JLabel以及JComboBox、我们设计的绘图面板PicPanel、还有一个JFileChooser(文件选择对话框)。自定义两个全局变量filePath和fileName用来存放文件的目录和名字,设置布局及窗体的大小,并添加按钮事件和ComboBox的Item事件。代码importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.io.*;importjava.awt.event.ActionListener;importjava.util.EventListener;importjava.awt.event.ItemListener;publicclassImageViewerextendsJFrameimplementsActionListener,ItemListener{

JFileChooserchooser=newJFileChooser();

JButton

chooseButton=newJButton("请选择目录");

JComboBox

chooseComboBox=newJComboBox();

JLabellabel=newJLabel("选择目录中的文件:");

JLabel

picLabel=newJLabel();

PicPanel

picPanel=newPicPanel();

JPanel

choosePanel=newJPanel();//放按钮,标签,下拉框面板

StringfilePath; //选择的文件所在的目录

StringfileName; //选择的文件名字

publicImageViewer(){ super("图片浏览器");

this.setLayout(new

BorderLayout());

this.add(picPanel,BorderLayout.CENTER); //设置只允许选择目录

chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

choosePanel.setLayout(new

FlowLayout());

chooseButton.addActionListener(this); //注册按钮事件

choosePanel.add(chooseButton);

choosePanel.add(label); chooseComboBox.setSize(16,10);

chooseComboBox.addItemListener(this); //注册Item事件

choosePanel.add(chooseComboBox);

this.add(choosePanel,BorderLayout.SOUTH); this.setSize(400,300);

this.show(); }

publicvoidactionPerformed(ActionEvente){ //……按钮事件,弹出文件选择对话框,并记录选择的目录路径

}publicvoiditemStateChanged(ItemEvente){ //……Item事件,修改绘图面板PicPanel中的ImageIcon并重绘该面板

} publicstaticvoidmain(String

args[]){ newImageViewer(); }}(3)建立文件列表(3)在实现事件方法之前我们要用到一个方法,即:用来根据文件路径来读取该目录下的所有文件名,并循环作为Item添加到我们的JComboBox中去。实现根据文件后缀名来对文件进行筛选。参考代码如下:

publicvoidreadFileDirs(String

file

温馨提示

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

评论

0/150

提交评论