第6章图形用户界面_第1页
第6章图形用户界面_第2页
第6章图形用户界面_第3页
第6章图形用户界面_第4页
第6章图形用户界面_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

第十章常用组件

Swing概述javax.Swing定义了相对于java.awt包更多、更强的功能。事件响应原理

设计和实现图形用户界面的工作主要有两个:1.创建组成界面的各种成分和元素2.定义图形用户界面的事件和各界面元素对不同事件的响应

事件响应原理

事件驱动机制--委托事件模型

将事件的处理委托给独立的对象,而不是组件本身,从而将使用者界面与程序逻辑分开

由产生事件的对象(事件源)、事件对象以及监听者对象所组成。产生事件的对象会在事件产生时,将与该事件相关的信息封装在一个称之为“事件对象”的对象中,监听者对象根据该事件对象内的信息决定适当的处理方式。对应不同事件需要不同的事件监听者

JLable组件标签只起信息说明的作用,而不接受用户的输入,也无事件响应。构造方法

JLable()JLable(Iconicon)JLable(Iconicon,inthalig)排列方式(LEFT、CENTER、RIGHT、LEADING和TRAILING)JLable(Stringtext)JLable(Stringtext,inthalig)JLable(Stringtext,Iconicon,inthalig)常用方法IcongetIcon()voidsetIcon(Iconicon)StringgetText()voidsetText(Stringlable)JButton组件和JToggleButton组件

Swing组件中的按钮的特殊效果

(1)改变按钮的图标,即一个按钮可以有多个图标,可根据Swing按钮所处的状态而自动变换不同的图标。(2)为按钮加入提示,即当鼠标在按钮上稍做停留时,在按钮边可出现提示,当鼠标移出按钮时,提示自动消失。(3)在按钮上设置快捷键。(4)设置默认按钮,即通过回车键运行此按钮的功能。JToggleButton按钮与JButton按钮的区别仅在于:当按下JButton按钮并释放鼠标后,按钮会自动弹起;而按下JToggleButton按钮并释放鼠标后,按钮不会自动弹起,除非再按一次。

JButton类的构造方法

JButton()JButton(Stringtext)JButton(Iconicon)JButton(Stringtext,Iconicon)JToggleButton类的构造方法JToggleButton()JToggleButton(Stringtext)JToggleButton(Stringtext,booleanselected)JToggleButton(Iconicon)JToggleButton(Iconicon,booleanselected)JToggleButton(Stringtext,Iconicon)JToggleButton(Stringtext,Iconicon,booleanselected)

成员方法

IcongetIcon()voidsetIcon(Iconicon)StringgetLabel()voidsetLabel(Stringlable)addActionListener(ActionListenerI)setPressedIcon(Iconpricon)设置按钮按下时的图标voidsetRolloverIcon(Iconroicon)设置鼠标经过时按钮的图标setEnabled(booleanb)设定按钮是否禁用voidsetSelected(booleanb)设置按钮的状态voidsetText(Stringtext)设置按钮的文本booleanisSelected()获取按钮状态IconActionEventActionEvent类包含在AWT包中触发这个事件的动作包括:单击按钮;双击一个列表中的选项;选择菜单项;在文本框中输入回车等

ActionEvent类可使用的主要方法getSource()方法:用来获取引发事件的对象名。getActionCommand()方法:用来获取对象的标签或事先为这个对象设置的命令名。事件处理的步骤创建组件对象为可能发生事件的对象注册监听在实现监听接口的类中改写该接口中定义的所有的抽象方法在抽象方法体中写入事件响应的代码事件响应实现接口ActionListener;响应动作事件

publicvoidactionPerformed(ActionEvente)

编写一个程序单击按钮时改变标签文本与按钮文本的内容。importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclassc10_1extendsJAppletimplementsActionListener

{Containercp=getContentPane();

Iconro=newImageIcon("g1.gif");

Iconge=newImageIcon("g2.gif");

Iconpr=newImageIcon("g3.gif");

JButtonbt=newJButton();

Iconicon=newImageIcon("g4.jpg");

JLabellb=newJLabel("Java",icon,JLabel.CENTER);

publicvoidinit()

{

bt.setRolloverEnabled(true);

bt.setText("OK");

bt.setHorizontalTextPosition(JLabel.CENTER);

bt.setVerticalTextPosition(JLabel.BOTTOM);

cp.add(lb,BorderLayout.NORTH);

cp.add(bt,BorderLayout.SOUTH);

bt.setIcon(ge);

bt.setRolloverIcon(ro);

bt.setPressedIcon(pr);

bt.addActionListener(this);

}publicvoidactionPerformed(ActionEvente)

{

if(e.getSource()==bt)

{

if(lb.getText()=="Hello")

lb.setText("你好!");

else

lb.setText("Hello");

if(bt.getText()=="OK")

bt.setText("确定");

else

bt.setText("OK");

}

}

}JCheckBox和JRadioButton组件

JCheckBox类的构造方法

JCheckBox()JCheckBox(Stringtext)JCheckBox(Stringtext,booleanselected)JCheckBox(Iconicon)JCheckBox(Iconicon,booleanselected)JCheckBox(Stringtext,Iconicon)JCheckBox(Stringtext,Iconicon,booleanselected)JRadioButton的构造方法JRadioButton()JRadioButton(Stringtext)JRadioButton(Stringtext,booleanselected)JRadioButton(Iconicon)JRadioButton(Iconicon,booleanselected)JRadioButton(Stringtext,Iconicon)JRadioButton(Stringtext,Iconicon,booleanselected)如何实现选项按钮的单选功能定义组javax.swing.ButtonGroupButtonGroupbg=newButtonGroup();定义选项按钮

r1=newJRadioButton("10");

r2=newJRadioButton("16");

将按钮添加到组里

bg.add(r1);

bg.add(r2);

常用方法同JButton组件和JToggleButton组件

ItemEvent

引发这类事件的动作包括:

(1)改变复选框JCheckbox对象的选中或不选中状态;

(2)改变单选按钮JRadioButton对象的选中或不选中状态;

(3)改变下拉列表框JComboBox对象中选项的选中或不选中状态;

(4)改变菜单项JMenuItem对象中选项的选中或不选中状态;

(5)改变JCheckboxMenuItem对象中选项的选中或不选中状态。

ItemEvent类的主要方法

1)ItemSelectablegetItemSelectable()

返回引发选中状态变化的事件源.此外,ItemEvent类的事件也可以使用其父类EventObject类提供的getSource()方法返回引发选中状态变化的事件源。2)ObjectgetItem()

返回引发选中状态变化事件的具体选择项,3)intgetStateChange()

返回此组件到底有没有被选中。它的返回值是静态常量SELECTED(代表选项被选中)和DESELECTED(代表选项被放弃或不选)事件响应

对象名.addItemListener(this);

引用ItemListener中的itemStateChanged(ItemEvente)方法响应对象的状态改变

根据复选框、与选择按钮来改变标签组件的文本大小及颜色importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;

publicclassc10_2extendsJAppletimplements

ItemListener,ActionListener

{

inti1=0,i2=0,i3=0;

intfonti=10;

Fontfont;

Containerctp=getContentPane();

JLabellb=newJLabel("请选择");

JCheckBoxcb1,cb2,cb3;

JRadioButtonr1,r2,r3;

ButtonGroupbg=newButtonGroup();publicvoidinit()

{

ctp.setLayout(newFlowLayout());

cb1=newJCheckBox("红色",false);

cb1.addItemListener(this);

ctp.add(cb1);

cb2=newJCheckBox("绿色",false);

cb2.addItemListener(this);

ctp.add(cb2);

cb3=newJCheckBox("蓝色",false);

cb3.addItemListener(this);

ctp.add(cb3);

r1=newJRadioButton("10");

r1.addActionListener(this);

ctp.add(r1);

r2=newJRadioButton("16");

r2.addActionListener(this);

ctp.add(r2);

r3=newJRadioButton("24");

r3.addActionListener(this);

ctp.add(r3);bg.add(r1);bg.add(r2);bg.add(r3);

ctp.add(lb);

}publicvoiditemStateChanged(ItemEvente)

{JCheckBoxcbx=(JCheckBox)e.getItem();

if(cbx.getText()=="红色")

{if(e.getStateChange()==e.SELECTED)

i1=255

else

i1=0;

}

if(cbx.getText()=="绿色")

{

if(e.getStateChange()==e.SELECTED)

i2=255;

else

i2=0;

}

if(cbx.getText()=="蓝色")

{

if(cbx.isSelected())

i3=255;

else

i3=0;

}

font=newFont("宋体",Font.BOLD,fonti);

lb.setFont(font);

lb.setForeground(newColor(i1,i2,i3));

}publicvoidactionPerformed(ActionEvente)

{Stringrbt=e.getActionCommand();

if(rbt=="10")fonti=10;

elseif(rbt=="16")fonti=16;

elsefonti=24;

font=newFont("宋体",Font.BOLD,fonti);

lb.setFont(font);

lb.setForeground(newColor(i1,i2,i3));

}

}JComboBox组件

JComboBox组件被称为下拉列表框用户可在这个列表中进行选择,或者直接输入所要的选项。下拉列表与选项按钮类似,一次只能选择一项。构造方法

JComboBox(Vectoritems)JComboBox()JComboBox(ComboBoxModelaModel)JComboBox(Object[]items)成员方法

voidaddActionListener(ActionListenere)voidaddItemListener(ItemListeneraListener)addItem(ObjectanObject)StringgetActionCommand()ObjectgetItemAt(intindex)intgetItemCount()intgetSelectedIndex()事件响应

选中列表中的选项产生ItemListener事件实现接口ItemListener处理方法

publicvoiditemStateChanged(ItemEvente)

在JComboBox组件中添加4个学生的名字选项,当点击下拉列表选择项时得到学生的名字,将他的成绩用标签文本显示。importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;publicclassc10_3extendsJAppletimplementsItemListener

{

Containerctp=getContentPane();

JLabellb1=newJLabel("姓名:"),

lb2=newJLabel("英语:"),

lb3=newJLabel("");

Stringname[]={"李林","赵欣","张扬","童梅"},

score[]={"80","94","75","87"};

JComboBoxcbx=newJComboBox();

publicvoidinit()

{

ctp.setLayout(newFlowLayout());

for(intj=0;j<name.length;j++)

cbx.addItem(name[j]);

ctp.add(lb1);

ctp.add(cbx);

cbx.addItemListener(this);

ctp.add(lb2);

ctp.add(lb3);

}publicvoiditemStateChanged(ItemEvente)

{

intc=0;

Stringstr=(String)e.getItem();

for(inti=0;i<name.length;i++)

if(str==name[i])

c=cbx.getSelectedIndex();

lb3.setText(score[c]);

}

}

JList组件

JList称为列表组件

JList组件与JComboBox组件的最大区别是:JComboBox组件一次只能选择一项,而JList组件一次可以选择一项或多项,选择多项时可以是连续区间选择(按住Shift键进行选择),也可以是不连续的选择(按住Ctrl键进行选择)。

构造方法

JList(VectorlistData)JList()JList(ListModeldataModel)JList(Object[]listData)成员方法

voidaddListSelectionListener

(ListSelectionListenere)IntgetSelectedIndex()Int[]getSelectedIndices()voidsetSelectionBackground(Colorc)voidsetSelectionForeground(Colorc)intgetVisibleRow()CountvoidsetVisibleRowCount(intnum)ListSelectionEvent事件

1.当用户单击列表框中的某一个选项并选中它时,将产生ListSelectionEvent类的选择事件,此事件是Swing的事件;

2.当用户双击列表框中的某个选项时,将产生MouseEvent类的动作事件。事件响应接口ListSelectionListener实现方法valueChanged(ListSelectionEvente)

设置一个JLabel组件和JList组件,点击列表框中的选项,将所选项的值作为JLabel组件的文本输出。

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

importjavax.swing.event.*;publicclassc10_4extendsJAppletimplementsListSelectionListener

{

JListlis=null;

JLabellb=null;

String[]s={"小学","初中","高中","大学","研究生"};

publicvoidinit()

{Containercp=getContentPane();

cp.setLayout(newBorderLayout());

lb=newJLabel();

lis=newJList(s);

lis.setVisibleRowCount(3);

lis.setBorder(BorderFactory.createTitledBorder("请选择"));

lis.addListSelectionListener(this);

cp.add(lb,BorderLayout.NORTH);

cp.add(newJScrollPane(lis),BorderLayout.CENTER);

}

publicvoidvalueChanged(ListSelectionEvente)

{

intm=0;

Stringstr="选取的是:";

int[]index=lis.getSelectedIndices();

for(inti=0;i<index.length;i++)

{

m=index[i];

str=str+s[m]+"";

}

lb.setText(str);

}

}

JTextField与JTextArea组件

JtextField被称为文本框。它定义了一个单行条形文本区,可以输出任何基于文本的信息,也可以接受用户的输入。

JtextField构造方法

JTextField()JTextField(intn)JTextField(Strings)JTextField(Strings,intn)成员方法

intgetColumns()voidsetColumns(intColumns)voidaddActionListener(ActionListenere)voidsetFont(Fontf)voidsetHorizontalAlignment(intalig)voidsetActionCommand(Stringcom)JTextArea构造方法JTextArea()JTextArea(intn,intm)JTextArea(Strings)JTextArea(Strings,intn,intm)JTextArea(Strings,intn,intm,intk)JTextArea(Documentdoc)JTextArea(Documentdoc,Strings,intn)成员方法

voidsetFont(Fontf)voidinsert(Stringstr,intpos)voidappend(Stringstr)voidreplaceRange(Stringstr,intstart,intend)publicintgetRows()publicvoidsetRows(introws)publicintgetColumns()publicvoidsetColumns(intColumns)事件处理

JTextField类只引发ActionEvent事件

JTextArea的事件响应由JTextCompo

温馨提示

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

评论

0/150

提交评论