JAVA语言程序设计 第十一章 图形用户界面 西北第二民族学院计算机科学与技术系 研究员 王伦津
Java 的图形用户界面AWT包 在java中,AWT是用来处理图形最基本的方式,它可以用来创建java的applet和窗口。AWT包提供4大类: 1、图形界面组件,如:窗口、按钮、菜单等 2、2D图形绘制组件,如:直线、圆形。 3、布局对象:用来安排图形界面组件的位置。 4、事件处理对象,用来处理图形界面组件所触发的事件。 图形用户界面(Graphics User Interface 简称GUI)通过提供菜单、按钮、标签标识、鼠标等,完成对计算机发出指令、启动应用程序等操作任务。
AWT组件的层次关系 AWT类放置在java,aw包中
建立窗口的Frame类 Java 中“窗口”被视为一个容器。它可以把各种不同的图形界面组件放置到这个容器中,而这些图形界面组件就是容器中的接口,通过图形界面组件所提供的方法,来完成一定的功能。 创建窗口的基本和必要操作包括如下步骤: 1、设置窗口的大小 2、给窗口一个标题 3、在屏幕的某个位置放置窗口 4、显示窗口 5、关闭窗口
// 创建一个Frame 类窗口 import java.awt.*; public class Window11_1 { static Frame fra=new Frame("这是一个窗口程序 "); //创建一个窗口对象fra,并设置窗口标题为“这是一个窗口程序” public static void main(String[] args) fra.setBounds(0,0,300,200); // 继承Component类的方法,设置窗口大小并将窗口放置在屏幕的某个位置 fra.setResizable(false);//设置窗口尺寸不可以改变 fra.setState(fra.NORMAL);//设置窗口为标准状态 fra.show(); //继承Window类的方法,在屏幕上显示窗口 }
Java.awt.Frame 的方法 Frame类的构造方法 主要功能 Frame() 创建没有标题的窗口 Frame(String title) 创建以title 为标题的窗口 Frame 类的方法 Int getState() 获得Frame窗口的状态(Frame.Normal 表示一般状态,Frame.ICONIFIED表示最小化状态 void setState(int state) 设置Frame 窗口状态 (同上) String getTitle() 获得Frame窗口的标题 void setTitle(String title) 设置 Frame窗口的标题 Boolean isResizable() 测试Frame窗口是否可以改变大小 void setResizable(boolean r) 设置Frame窗口是否可以改变大小 Image getIconImage() 返回窗口的最小化图标 void setIconImage(Image img) 设置窗口的最小化图标为img Java.awt.Frame 的方法
// 设置窗口图标 import java.awt.*; import javax.swing.ImageIcon; public class Window11_2 { static Frame fra=new Frame("这是一个窗口程序 "); static ImageIcon icon=new ImageIcon("14_3.jpg");// 创建icon对象为14_3.jpg public static void main(String[] args) fra.setBounds(0,0,200,100); fra.setIconImage(icon.getImage());// 将icon 对象设置为窗口图标 fra.show();//显示窗口 } 14_3.jpg文件必须放置在与程序相同的目录中
使用图形用户界面AWT的组件 图形用户界面组件包括按钮、标签、复选框等。在图形程序中,这些组件被放置到窗口容器中,通过设置或引用它们完成相应的功能。 Java.awt.Label 的方法 Label类的构造方法 主要功能 Label() 创建一个没有文字的标签 Label(Strng str) 创建一个以str为文字的标签 Label(String str,int align) 创建一个以str为文字的标签,并以align 为对齐方式LEFT CENTER RIGHT 表示左中右 Label类的方法 int getAligment() 返回标签内文字的对齐方式 void setAligment(int align) 设置标签内文字的对齐方式 String getText() 获得标签内的文字 void setText(String text) 设置标签内的文字
标签组件是用来在窗口中显示文字的组件,由Label类来创造 // 在窗口中的指定位置创建一个标签 import java.awt.*; public class Window11_3 { public static void main(String[] args) Frame fra=new Frame("这是创建标签的程序 "); Label b1=new Label(); // 创建一个空标签 fra.setBounds(0,0,300,200); b1.setText("欢迎使用JAVA语言");//为标签添加文字 b1.setAlignment(Label.CENTER);//设置标签在窗口中央位置 b1.setBackground(Color.blue);//引用Componentlei的方法设置标签背景颜色 b1.setForeground(Color.red); //引用Componentlei的方法设置标签中的文字颜色 fra.add(b1) ; fra.setVisible(true); } Color类用来设置颜色,构造方法有两个 Color(float r,float g,float b);和 Color(int r,int g,int b); 其中r、g、b表示红绿蓝3色float 型取值范围0.0—1.0;int 型取值范围0-256
按钮组件 按钮组件提供用户快速启动某一动作的方法, 通过点击鼠标或按下键盘某键完成一定的操作。由java.awt类库的Button类创建。 主要功能 Button() 创建一个没有标题的按钮 Button(String str) 创建一个以str 为标题的按钮 Button类的方法 String getLabel() 获得按钮的标题 void setLabel(String str) 获得设置按钮的标题为str
import java.awt.*; // 创建 按钮 public class Window11_4 { public static void main(String[] args) { Frame fra=new Frame(" 创建按钮程序 "); Button but=new Button("push me"); // 创建一个按钮 fra.setBounds(0,0,300,200); fra.add(but) ; //将按钮添加到窗口中 fra.setVisible(true); //显示窗口 } import java.awt.*; // 创建一个给定大小尺寸的 按钮 public class Window11_5 { public static void main(String[] args) { Frame fra=new Frame(" 创建按钮程序 "); Button but=new Button("push me"); // 创建一个按钮 fra.setBounds(0,0,300,200); fra.setLayout(null);//关闭页面设置 but.setBounds(50,50,100,50);//设置按钮的大小 fra.add(but) ; //将按钮添加到窗口中 fra.setVisible(true); //显示窗口 }
文本框 文本框是用来在窗口中显示文字的矩形框,这些文字可以被用户编辑。文本框可以用来输入文字、编辑文字并显示输入的文字、读取用户输入的文字。由TextField类来创建。 TextField类的构造方法 主要功能 TextField() 创建一个空的文本框 TextField(int colnmns) 创建一个空的文本框,具有指定的列 TextField(String text) 创建一个包含有”text” 内容的文本框 TextField(String text,int colnmns) 创建一个具有指定列且包含内容的文本框 TextField类的方法 String getText() 获得文本框的内容 int getColumns() 获得文本框的列数 void setText(String text) 设置文本框的内容为text void setColumns(int columns) 设置文本框的列数
// 创建文本框 import java.awt.*; public class Window11_6 { public static void main(String[] args) throws Exception Frame fra=new Frame(" 创建文本框程序 "); TextField txt1=new TextField(10 ); TextField txt2=new TextField(10); fra.setBounds(0,0,300,200); fra.setLayout(null);//关闭页面设置 txt1.setBounds(50,50,130,20);//设置文本框的大小 txt2.setBounds(50,70,130,20); fra.add(txt1) ; //将 文本框添加到窗口中 fra.add(txt2) ; fra.setVisible(true); //显示窗口 // System.in.read(); // System.exit(0); }
在网页中加载图像或照片 在AWT中使用Image处理图像,它是直接从java.Object类派生的 Java.awt.Image 的方法 主要功能 Image() 创建一个Image对象 如果在applet中加载图像,可以使用Applet类的getImage()方法 Image getImage(URL url); Image getImage(URL url,String name); URL 是统一资源定位器的简称,表示Internet/Intranet上的资源位置
//该程序取自李尊朝等编著的“JAVA语言程序设计“第172页例11-7 //在网页中加载图形 import java.awt.*; import java.applet.*; public class Img11_7 extends Applet { Image image; public void paint(Graphics g) { g.drawImage(image,10,10,this); } public void init() image=getImage(getDocumentBase(),"02.gif"); 在java中,各种文字都是以图形的方式输出,通过使用Font类和FontMetrics类的方法设置字型、字体大小等
设置字型、字体大小 java.awt.Font 的方法 Font类的构造方法 主要功能 Font(String fontname,int style,int size) 创建的字体名称为fontname 、字体样式为style、字体大小为size Font类的方法 Font decode(String str) 获得字符串所描述的字体 String getFontName() 获得字体名称 int getStyle() 获得字体的样式 int getSize() 获得字体的大小尺寸 boolean isPlain() 测试字体是否是正常体 boolean isBold() 测试字体是否是粗体 boolean isItalic() 测试字体是否是斜体 String toString() 将此对象转换为字符串表示
FontMetrics类获得文字详细说明 主要功能 FontMetrics(Font font) 创建一个FontMetrics类的对象 FontMetrics类的方法 Font getFont(r) 获得当前字体 int getLeading() 获得字体的Leading(字冠)值 int getAscent() 获得字体的Ascent(上差)值 int getDecent() 获得字体的Decent(下差)值 int getHeight() 获得字体的Height(高度)值 String toString() 返回对象的字符串表示 Java.awt.FontMetrics的方法
Graphics类设置字体及输出字符uo字符串内容 setFont(Font myfont); Java.awt.Graphics的方法 Graphics类的方法 主要功能 drawString(String str,int x,int y) 以x,y 为起点位置,用当前的颜色和字体绘制str字符串内容 drawChars(char[] ch,int offset,int number,intx,int y) 从字符数组ch 的第offset位置的字符开始(offset为数组下标),总共截取number个字符:以x,y为坐标的起始位置,用当前的颜色和字体绘制number个字符 drawBytes(byte[] bt,int offset,int number,int x,int y) 从字节数组bt 的第offset位置的字符开始(offset为数组下标),总共截取number个字符:以x,y为坐标的起始位置,用当前的颜色和字体绘制number个字符
// 设置Font 类字体并显示此字体 import java.awt.*; public class Font11_8 extends Frame { public Font11_8() { super("设置字体程序 Example"); setSize(420,125); show(); } public void paint(Graphics g) { g.setFont(new Font("Serif",Font.BOLD,12));//设置当前字体为常规并加粗 g.drawString("Serif 12 point bold." ,20,50);// 按当前字体输出内容 g.setFont(new Font("",Font.ITALIC,24)); //斜体字体 g.drawString("Monospaced 24 point italic. " ,20,70);// g.setFont(new Font("SansSerif",Font.PLAIN,14));//常规字体 g.drawString("SansSerif 14 point plain. " ,20,90); g.setColor(Color.red); g.setFont(new Font("Serif",Font.BOLD+Font.ITALIC,18)); g.drawString(g.getFont().getName()+" "+g.getFont().getSize()+ "point bold italic.",20,110); } public static void main(String args[]) { Font11_8 app=new Font11_8();//创建Font11_8对象app // 同时会引用其构造方法,并执行类中规定的功能
import java.awt.*; public class Font11_9 extends Frame { public Font11_9() { super("FontMetrics Example"); setSize(510,210); show(); } public void paint(Graphics g) { g.setFont(new Font("sansSerif",Font.BOLD,12));//设置当前字体 FontMetrics fm=g.getFontMetrics(); //创建FontMetrics类对象fm g.drawString("Current font:"+g.getFont(),10,40);//获得当前字体信息 g.drawString("Ascent:"+fm.getAscent(),10,55);//输出当前字体的上差 g.drawString("Descent:"+fm.getDescent(),10,70); g.drawString("Height:"+fm.getHeight(),10,85); g.drawString("Leading:"+fm.getLeading(),10,100); Font font=new Font("Serif",Font.ITALIC,14); fm=g.getFontMetrics(font); g.setFont(font); //设置当前字体为斜体,大小为14 g.drawString("Current font:"+g.getFont(),10,130); g.drawString("Ascent:"+fm.getAscent(),10,145); g.drawString("Descent:"+fm.getDescent(),10,160); g.drawString("Height:"+fm.getHeight(),10,175); g.drawString("Leading:"+fm.getLeading(),10,190); } public static void main(String args[]) { Font11_9 app=new Font11_9();//创建Font11_9对象app } } // 设置FontMetrics类字体并显示此字体
JAVA语言中的事件处理 在设计和实现图形用户界面的过程中,主要完成两个任务:第一是创建窗口并在窗口中添加各种组件,指定组件的属性和它们在窗口中的位置,从而构成图形界面的外观效果;第二是定义图形界面的事件和各种组件对不同事件的响应,从而实现图形界面与用户的交互。 Java 对事件处理采用委托时间模型的形式。它的含义是将事件的处理委托给独立的对象,使得用户界面与程序逻辑分开,整个“委托事件模型”由产生事件的对象、事件对象和监听者对象之间的关系所组成。 在事件产生时,产生事件的对象将于该对象相关的信息封装在一个事件对象中,并将该对象传递给监听者对象,监听者对象根据该事件对象内的信息决定适当的处理方式。监听者对象要得到事件件发生的通知,必须在程序中向产生事件的对象注册。
事件监听者的种类 1 ActionListener:处理动作事件,例如单击按钮 2 ComponetListener:处理组件被隐藏、移动、尺寸移动或显示事件 3 ContainerListener:处理在容器中加入组件或删除组件的事件 FocusListener:处理组件获得或失去焦点的事件 KeyListener:监听键盘事件 MouseListener:监听鼠标的单击、进入组件、退出组件或按下鼠标事件 MouseMotionListener:监听鼠标拖动或者移动的事件 TextListener:监听文本值改变的事件 9 WindowListener:处理窗口激活、失去活动窗口、最小化、不最小化、打开、关闭或者退出的事件
事件的种类 1 ActionEvent: 处理按钮、列表双击、单击菜单项目 ComponentEvent :处理组件被隐藏、移动、尺寸调整或者变为不可见的事件 3 FocusEvent:处理组件获得或失去焦点的事件 4 InputEvent:处理复选框和列表项单击、控件的选择和可选菜单项的选择事件 5 KeyEvent:处理键盘的输入 6 MouseEvent:处理鼠标拖动、移动、单击、按下、释放或者进入、退出组件的事件 7 TextEvent:处理文本区域或者文本区域的值得改动 8 WindowEvent:处理窗口激活、失去活动窗口、最小化、打开、关闭或者退出的事件
事件类的继承关系
定义事件响应接口及实现方法 每一个事件类都有唯一的事件处理方法接口。例如对于处理鼠标事件“MouseEvent”类的对应接口为“MouseListener”接口。当选择菜单时就会激发一个动作事件ActionEvent,在程序中就要加入一个能够听到这个事件的接口,实现这个接口就可以监听到事件的产生。 实现接口建立监听对象类handler Class handler implements ACtionListener{ … } 建立事件源与监听者的对应关系 对象名.addActionListener(handler) 如button.addActionListener(handler)的意思是监听者handler 向它的按钮对象(事件源)button 注册
事件处理流程 1、监听者对象handler向事件源对象button注册 button.addActionListener(handler) 2、按下按钮时,button 对象会产生一个ActionEvent类的对象事件something . 3、按钮会把事件something 根据注册传递给事件监听者handler 4、事件监听者handler实现监听需要实现“ActionListener”接口书写为 class handler implements ActionListener{ actionPerformed(ActionEvent e){ …… } 5、当事件发生时,引发的事件将被此事件的监听者监听到,并引发ActionListener类的阿磁体噢年Performed(ActionEvent e)方法响应动作事件。
事件监听者接口和事件监听者接口提供的方法 事件类 监听者接口 监听者接口提供的事件处理方法 ActionEvent ActionListener actionPerformed(ActionEvent e) AdjustmentEvent AdjustmentListener adjustmentValueChange(AdjustmentEvent e) ItemEvent ItemListener itemStateChange(ItemEvent e) KeyEvent KeyListener keyType(KeyEvent e) keyPressed(KeyEvent e) keyReleased(KeyEvent e) MouseEvent MouseListener mouseClicked (MouseEvent e) mouseEntered (MouseEvent e) mouseExited (MouseEvent e) mousePressed (MouseEvent e) mouseRelease (MouseEvent e) mouseDragged (MouseEvent e) mouseMoved (MouseEvent e)
事件监听者接口和事件监听者接口提供的方法 事件类 监听者接口 监听者接口提供的事件处理方法 TextEvent TextListener textValueChange(TextEvent e) WindowEvent WindowListener windpwActivated (WindowEvent e) windpwClosed(WindowEvent e) windpwClosing(WindowEvent e) windpwDeactivated(WindowEvent e) windpwDeiconifieded(WindowEvent e) windpwIconified(WindowEvent e) windpwOpened(WindowEvent e) ActionEvent 类使用的主要方法 1、getSource()方法,用来捕获引发事件的对象名 2、getActionCommmand()方法,用来获取引发事 件动作的命令名
//定义窗口事件以及对事件的实现 //匿名类只有类名没有方法,只能作为内嵌类存在 import java.awt.*; import java.awt.event.*; class Label11_10 extends Frame{ public Label11_10(){ super("Event Example"); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0);} } ); initialize(); } public void initialize(){ this.setLayout(null); Label b1=new Label(); setSize(300,200); b1.setText("欢迎使用java语言"); b1.setBounds(50,50,150,20); b1.setAlignment(Label.CENTER); b1.setBackground(Color.blue); b1.setForeground(Color.red); add(b1); setVisible(true); public static void main(String args[]){ new Label11_10(); 程序中为匿名类添加了方法见红字部分
//通过定义两个按钮事件 实现ActionListener接口 // 其默认方法, 是actionPerformed(ActionEvent e) import java.awt.*; import java.awt.event.*; import javax.swing.ImageIcon; class Label11_11 extends Frame implements ActionListener{ Button but1,but2; Label lb11; public Label11_11(){ super("Event Example"); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0);} } ); initialize(); } public void initialize() { setSize(300,200); this.setLayout(null); but1=new Button("but1"); but1.setBounds(10,40,70,25); but1.addActionListener(this) ; add(but1);
but2=new Button("but2"); but2.setBounds(105,40,70,25); but2.addActionListener(this) ; add(but2); lb11=new Label("0",Label.CENTER); lb11.setBounds(75,70,70,25); lb11.setForeground(Color.blue ); add(lb11); setVisible(true); } public void actionPerformed(ActionEvent e) {// if(e.getSource()==but1) { int value=(new Integer(lb11.getText())).intValue(); lb11.setText(String.valueOf(value+1)); else if(e.getSource()==but2) lb11.setText("0"); public static void main(String args[]){ new Label11_11(); 程序先建两个按钮,然后监听者this对每个按钮注册它的监听。根据条件语句中的方法获得引发事件的对象。
Swing包 为了克服AWT包中隐含的图形组件,在不同的操作平台上显示不同效果问题,1998年推出的JDK1.2版本时,将javax.swing 包列入java基础库。 AWT与swing包的比较 1、swing 包拥有4倍于AWT的用户界面组件 2、新版的swing包可能与旧版不兼容 3、swing包是建立在AWT包的基础上的,所以完全舍弃AWT包不大可能 4、AWT包的运行速度比swing包快` 5、将AWT包改写为swing包时,在很多情况下可以只在原有的AWT组件 的每个类名前面加上“J”即可。
创建JFrame窗口 JFrame类的构造方法 主要功能 JFrame() 创建没有标题的窗口 JFrame(String title) Container getContentPane() 获得窗口的ContentPane组件 int getDefaultCloseOperation() 当用户关闭窗口时的默认处理方法 int setDefaultCloseOperation() 设置用户关闭窗口时发生的操作 void update(Graphics g) 引用paint()方法重绘窗口 void remove(Component component) 将窗口中指定的组件删除 JMenuBar getMenuBar() 获得窗口中的菜单栏组件 void setLayout(LayoutManager manager) 设置窗口的布局
创建JFrame容器时注意以下几点 将按钮组件加入到窗口的一般操作方法: 1、设置窗口的ContentPane,创建按钮对象 1、创建的JFrame 窗口是不可见的,要使得可见,需要使用show() 方法或setVisible(boolean b)方法,其中setVisible中的参数b=true。 2、使用setSize方法设置窗口大小。 3、向JFrame 中添加组件时,必须先取得ContentPane,然后再使用add()方法把组件加入到ContentPane中,这与AWT包中的Frame直接使用add()方法添加组件不同。 将按钮组件加入到窗口的一般操作方法: 1、设置窗口的ContentPane,创建按钮对象 Container c=getContentPane(); but1=new JButton(“ 按钮1”); 2、添加按钮组件到JFrame窗口中 c.add(but1);
// 创建一个JFrame 窗口,这种窗口是不可见的 // 要使其可见需要使用show() 或setVisble(Boolean b)方法 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Label11_12 extends JFrame { public Label11_12(){ super(" 显示窗口程序"); setSize(300,200); show(); } public static void main(String args[]){ Label11_12 app=new Label11_12(); 此程序Label11_12 类继承JFrame,语句“super(”显示窗口程序“是程序引用父类的工作方法”JFrame(String title)”,设置窗口的标题:使用setSize()方法设置窗口大小,使用show()方法将窗口显示出来。
窗口事件 上例不能实现关闭窗口退出程序,必须强行退出,显然不能满足要求,原因是没有对窗口关闭操作创建它的事件响应方法。实现这一功能需要利用java 提供的WindowEvent窗口事件。 窗口事件 说明 WINDOW_ACTIVATED 窗口被激活 WINDOW_DEACTIVATED 窗口失活(当其他窗口被激活) WINDOW_CLOSED 窗口已被关闭 WINDOW_OPENED 窗口已被打开 WINDOW_CLOSING 窗口正被关闭 WINDOW_ICONIFIED 窗口被最小化为图标 WINDOW_DEICONIFIED 窗口被由图标恢复 WindowEvent 窗口事件
// 定义两个窗口,分别对没有激活的窗口做出隐藏处理 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class AWT11_13 extends JFrame { JFrame ff1=new JFrame(); JFrame ff2=new JFrame(); public AWT11_13() { ff1.setSize(300,200); ff1.setTitle("显示窗口1"); ff1.setVisible(true); ff1.addWindowListener(new Win_affair()); //监听者对象Win_affair()给ff1对象注册 ff2.setSize(300,200); ff2.setTitle("显示窗口2"); ff2.setVisible(true); ff2.addWindowListener(new Win_affair()); //监听者对象Win_affair()给ff2对象注册 } public static void main(String args[]) { new AWT11_13();
private class Win_affair extends WindowAdapter public void WindowOpened(WindowEvent e) { } public void WindowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { if(e.getSource()==ff1){//检查ff1是失活吗 ff1.setVisible(false); ff2.setVisible(true); } else { ff1.setVisible(true); ff2.setVisible(false); public void windowClosing(WindowEvent e){ System.exit(0);
JLabel构造方法 功能说明 JLabe() 创建一个空标签 JLabe(Icon icon) 创建一个图标为icon的标签 JLabe(Icon icon,int alignment) 创建图标为icon的标签,指定水平排列方式(如:left,center等) JLabe(String str) 创建一个含有str 文字的标签 JLabe(String str ,int alignment) 创建含有str文字并指定排列方式的标签 JLabe(String str,Icon icon,int alignment) 创建汉icon图标 str文字并指定排列方式的标签 JLabe方法 Icon getIcon() 获得此标签的图标 void setIcon(Icon icon) 设置标签的图标为icon String getText() 获得此标签的文字 void setText(String str() 设置标签的文字为str void setHorizontalAlignment(int alig) 设置整个标签的水平对齐方式 void setVerticalAlignment(int alig) 设置整个标签的垂直对齐方式 void setHorizontalTextPosition(int ps) 设置标签中文字的水平对齐位置 void set VerticalTextPosition(int ps) 设置标签中文字的垂直对齐位置
AbstractButton类 AbstractButton方法 功能说明 void addActionListener(ActionListene I) 注册监听者的类对象 void addChangeListener(ActionListene I) 改变监听者的类对象 Icon getIcon() 获得此按钮的图标 void setSelectIcon(Icon icon) 设置按钮的图标为icon String getText() 获得按钮上的文字 void setText(String str) 设置按钮上的文字为str void setEnabled(boolean b) 设置按钮是否禁用 boolean isSelected() 得到按钮的状态 void setRolloverIcon(Icon icon) 为按钮设置滚翻图标 在Swing中所有按钮都是由AbstractButton类派生的,它派生出两个组件JButton组件和JToggleButton组件。前者是按钮,后者是单选按钮和复选框的基类
JButton类的方法 JButton类的构造方法 功能说明 JButton() 创建一个按钮 JButton((Icon icon) JButton(String str) 创建一个包含有str文字的按钮 JButton(String str ,Icon icon) 创建既有图标icon又有文字str 的按钮
JToggleButton类的方法 JToggleButton类的构造方法 功能说明 JToggleButton() 创建一个无标签的按钮 JToggleButton(Icon icon) 创建一个图标为icon 的按钮 JToggleButton(Icon icon,boolean sele) 创建一个图标为icon 的按钮且初始态false JToggleButton(String str) 创建一个含文字str 文字的按钮 JToggleButton(String str,boolean sele) 创建一个含文字str 文字的按钮初态为false JToggleButton(String str,Icon icon) 创建一个含图标icon和文字str的按钮 JToggleButton(String str,Icon icon ,boolean sele) 创建一个含图标icon和文字str的按钮初态为false
// 创建标签和两个按钮,对于按钮事件定义了一个按钮是当单击按钮时 // 出现图像翻滚,另一个按钮是当单击按钮时弹出对话框 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class AWT11_14 extends JFrame { private JLabel label1,label2; private JButton but1,but2; public AWT11_14() { super(" 标签按钮测试窗口 Example"); //引用父类构造方法 Container c=getContentPane(); // 设置一个ContentPane容器对象 c.setLayout(new FlowLayout(100,100,10)); //选择窗口布局为FlowLayout Icon icon=new ImageIcon("125.gif"); label1=new JLabel("标签中有文字和图像",icon,SwingConstants.CENTER); // 设置标签中包含的文字、图像以及它的水平排列方式 label1.setToolTipText("这是标签");// label1.setHorizontalTextPosition(SwingConstants.CENTER); label1.setVerticalTextPosition(SwingConstants.BOTTOM); c.add(label1); //添加标签对象 Icon icon1=new ImageIcon("05.gif");//创建图形对象 Icon icon2=new ImageIcon("06.gif"); Icon icon3=new ImageIcon("10.gif"); but1=new JButton("按钮1"); c.add(but1);
but2=new JButton("按钮2 ",icon2); but2.setRolloverIcon(icon3); c.add(but2); but1.addActionListener(new listener()); but2.addActionListener(new listener()); setSize(360,200); show(); } public static void main(String args[]) { AWT11_14 app=new AWT11_14(); app.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e) {System.exit(0);} }); private class listener implements ActionListener {//定义listener类并实现监听程序 public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null,"You pressed:"+e.getActionCommand());
JCheckBox类的方法 JCheckBox类的构造方法 功能说明 JCheckBox() 创建一个无标签的复选框 JCheckBox (Icon icon) 创建一个图标为icon的复选框 JCheckBox(Icon icon,boolean sele) 创建一个图标为icon的复选框初态为false JCheckBox(String str) 创建一个含有文字的复选框 JCheckBox(String str ,boolean sele) 创建一个含有文字的复选框初态为false JCheckBox(String str, Icon icon) 创建一个含图标icon和文字的复选框 JCheckBox(String str, Icon icon,boolean sele) 创建一个含图标icon和文字的复选框初态为false 单选按钮JRadioButton类的构造方法与复选框的构造方法类似,故省略
// 创建单选按钮和复选框对象并实现其事件处理 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class AWT11_15 extends JFrame { private JTextField table1,table2; private Font plainFont,boldFont,italicFont,boldItalicFont;//设置字体对象 private JRadioButton plain,bold,italic,boldItalic;//设置单选按钮对象 private JCheckBox check1,check2; //设置复选框对象 private ButtonGroup radioGroup; //设置单选按钮对象 public AWT11_15() { super("设置单选按钮和复选框程序 Example"); //引用父类构造方法 Container c=getContentPane(); // 设置一个ContentPane容器对象 c.setLayout(new FlowLayout()); //选择窗口布局为FlowLayout table1=new JTextField("可以看到当选择不同选项时会发生变化 ",25); //创建文本框对象table 并设置它的长度和将文字赋给它 c.add(table1); //添加文本框 plain=new JRadioButton("Plain",true); //创建单选按钮选项并设置初值为true 表示选中 c.add(plain); //添加单选按钮 bold=new JRadioButton("Blod",false); c.add(bold); italic=new JRadioButton("Italic",false); c.add(italic);
boldItalic=new JRadioButton("Bold/Italic",false); c.add(boldItalic); plain.addItemListener(new handler1());//将监听者注册给plain对象 bold.addItemListener(new handler1()); italic.addItemListener(new handler1()); boldItalic.addItemListener(new handler1()); radioGroup=new ButtonGroup();//创建单选按钮组,建立相对关联 radioGroup.add(plain); radioGroup.add(bold); radioGroup.add(italic); radioGroup.add(boldItalic); plainFont=new Font("TimesRoman",Font.PLAIN,14); //引用Font类构造方法创建自定义字体对象,并设置对象为TimesRoman,大小是14 boldFont=new Font("TimesRoman",Font.BOLD,14); italicFont=new Font("TimesRoman",Font.ITALIC,14); boldItalicFont=new Font("TimesRoman",Font.BOLD+Font.ITALIC,14); table1.setFont(plainFont);//为文本框设置自定义字体对象 table2=new JTextField("使用复选框只改变字体式样 ",25); table2.setFont(new Font("TimesRoman",Font.PLAIN,14));//常规文字 c.add(table2); check1=new JCheckBox("Bold"); //创建复选框对象check1 c.add(check1); //添加复选框 check2=new JCheckBox(" Italic"); c.add(check2);
check1.addItemListener(new handler2()); setSize(300,180); show(); } //实现监听者的类接口方法 private class handler1 implements ItemListener{ public void itemStateChanged(ItemEvent e) { if(e.getSource()==plain)//获得事件源对象 table1.setFont(plainFont); else if(e.getSource()==bold) table1.setFont(boldFont); if(e.getSource()== italic) table1.setFont( italicFont); if(e.getSource()==boldItalic) table1.setFont(boldItalicFont); table1.repaint();//以新的字体更新文本框
private class handler2 implements ItemListener{ private int valBold=Font.PLAIN; private int valItalic=Font.PLAIN; public void itemStateChanged(ItemEvent e) { if(e.getSource()== check1) if(e.getStateChange()==ItemEvent.SELECTED) valBold=Font.BOLD; else valBold=Font.PLAIN; if(e.getSource()== check2) valBold=Font.ITALIC; table2.setFont(new Font("TimesRoman" ,valBold+valItalic,14)); table2.repaint();// 设置文本框字体以新的字体更新文本框 } } public static void main(String args[]) { AWT11_15 app=new AWT11_15();//创建Font11_8对象app // 同时会引用其构造方法,并执行类中规定的功能 app.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e) {System.exit(0);} }); } }
JComboBox类的方法 JComboBox类的构造方法 功能说明 JComboBox() 创建一个空的下拉列表框对象,可以使用addItem()方法添加选项 JComboBox(Vector vect) 使用向量表建立一个JComboBox对象 JComboBox(ComboBoxModel model) 从已有的model获得选项,创建JComboBox对象 JComboBox(Object items) 使用数组创建JComboBox对象 JComboBox viod add 注册事件对象给ActionListener对象 注册事件对象给ItemListener对象 为选项表添加选项 Object getItemAt(int index) 获得指定下标的列表项 int getItemCount() 获得列表中的选项数 int getSelectedItem() 获得当前选择的项
//创建下拉列表框并实现其事件处理 // import java.awt.*; import java.awt.event.*; import javax.swing.*; public class AWT11_16 extends JFrame { private JComboBox images; private JLabel label; private String names[]={"狗.gif","猴.gif","虎.gif","马.gif","鼠.gif","兔.gif"}; private Icon icons[]={new ImageIcon(names[0]), new ImageIcon(names[1]), new ImageIcon(names[2]),new ImageIcon(names[3]), new ImageIcon(names[4]),new ImageIcon(names[5])}; public AWT11_16() { super(" 下拉列表框显示图形文件 "); Container c=getContentPane(); c.setLayout(new FlowLayout()); images=new JComboBox(names); //创建下拉列表对象 images.setMaximumRowCount(3); //最多显示3行 images.addItemListener( //监听者注册给images对象 new ItemListener(){
public void itemStateChanged(ItemEvent e) { label.setIcon(icons[images.getSelectedIndex()]);} //根据 getSelectedIndex()方法的值得到下拉列表框的选项值 }); c.add(images); //添加下拉列表框对象 label=new JLabel(icons[0]); c.add(label); //加入标签对象 setSize(450,380); show(); } public static void main(String args[]){ AWT11_16 app=new AWT11_16(); app.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);
JList类的方法 JList类的构造方法 功能说明 JList() 创建一个空的JList对象 JList(Vector vect) 使用向量表创建一个JList对象 JList(Object items) 使用数组创建一个JList对象 JList void addListSelectionListener (ListSelectionListener e) 将事件监听者注册给 JList对象 int getSelectedIndex(int i) 获得从JList对象中选取的单个选项 int getSelectedIndices(int[] I) 获得从JList对象中选取的多个选项 void setVisibleRowCount(int num) 设置可见的列表选项 int getVisibleRowCount() 获得可见的列表选项值
//创建下拉列表框并实现其事件处理, 改编例11_16实现JList类的编程 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class AWT11_17 extends JFrame { private JList images; private JLabel label; private String names[]={"狗.gif","猴.gif","虎.gif","马.gif","鼠.gif","兔.gif"}; private Icon icons[]={new ImageIcon(names[0]), new ImageIcon(names[1]), new ImageIcon(names[2]),new ImageIcon(names[3]), new ImageIcon(names[4]),new ImageIcon(names[5])}; //创建图标数组对象icons[],其图标文件名对应字符串数组对象names[] public AWT11_17() { super(" 列表框显示图形文件 "); Container c=getContentPane(); c.setLayout(new FlowLayout()); images=new JList(names); //创建下拉列表对象 images.setVisibleRowCount(3); //最多显示3行 images.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); c.add(new JScrollPane(images)); //将对象放到JScrollPane容器中
label=new JLabel(icons[0]); c.add(label); //加入标签对象 images.addListSelectionListener(new ListSelectionListener(){ //监听者注册给images对象,创建ListSelectionListener()类对象 public void valueChanged(ListSelectionEvent e ) { label.setIcon(icons[images.getSelectedIndex()]);} //根据getSelectedIndex()方法的值得到下拉列表框的选项值 }); setSize(340,450); show(); } public static void main(String args[]){ AWT11_16 app=new AWT11_16(); app.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);
JTextField类的方法 JTextField类的构造方法 功能说明 JTextField() 创建一个空的JTextField对象 JTextField(int n) 创建一个n列宽的JTextField对象 JTextField(String str) 创建一个JTextField对象并用str赋值 JTextField(String str ,int n) 创建一个n列JTextField对象并用str赋值 JTextField类的方法 void addActionListener (ActionListener e) 将监听者注册给JTextField对象 int getColumns() 获得对象的列数 void setgetColumns(int columns) 设置对象的列数 void setFont(Font font) 设置JList对象中文字的字体 void setHorizontalAlignment(int align) 设置JList对象中文字的字体水平对齐方式
JTextArea类的构造方法 功能说明 JTextArea() 创建一个空的JTextArea对象 JTextArea(int m,int n) 创建一个m行n列的JTextArea对象 JTextArea(String str) 创建一个JTextArea对象并指定输入文字 JTextArea(String str,int m,intn) 创建一个有上述两个功能的JTextArea对象 JTextArea(Document doc,String str,int n) 创建一个使用指定存储模式的JTextArea对象并对定义对象的列宽和指定文字 JTextArea类的方法 void setFont(Font font) 设置字体 void insert(String str,int position) 在指定位置插入给定文字 void append(String str) 在文本的末尾插入指定文字 void replaceRange(String str,int start,int end) 将给定范围内的文本用指定的文字替换 int getLineCount() 获得文本区域包含的行数 int getRows() 获得对象的行数 void setRows(int rows) 设置对象的行数 int getColumns() 获得对象的列数 Void setColumns(int columns) 设置对象的列数
//创建文本框和文本域并实现其事件处理 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class AWT11_18 extends JFrame { private JTextField text1; private JTextArea t1; private JLabel lb11,lb12; public AWT11_18() { super("文本框和文本域测试程序 "); Container c=getContentPane(); c.setLayout(new FlowLayout()); lb11=new JLabel("在文本框中输入文本内容 "); c.add(lb11); text1=new JTextField(15); c.add(text1); text1.addActionListener(new handler());//监听着注册给text1对象 String s="这是一个字符串演示文本\n"; t1=new JTextArea(s,11,15); c.add(t1); setSize(350,300); show(); }
public static void main(String args[]){ AWT11_18 app=new AWT11_18(); app.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); private class handler implements ActionListener{ public void actionPerformed(ActionEvent e) {//此方法响应事件 String s=" "; if(t1.getLineCount()<10){ //判断文字区域的当前行数是否小于10行,如果是继续输入文字 s=text1.getText();//获得输入的文本内容 t1.append(s+"\n");//将获得的文本加到文本域 else //行数大于10,输出提示信息 JOptionPane.showMessageDialog(null,"输入内容太多,请删除部分内容"); text1.setText(""); // 将文本清空
JProgressBar的方法 JProgressBar 类的构造方法 功能说明 JProgressBar() 创建一个水平进度条 void addChangeListener (ChangeListener e) 监听者注册给进度条对象,实现ChangeListener类的方法 int getMaxmum() 获得进度条最大值 int getMinmum() 获得进度条最小值 int getVakue() 获得进度条当前值 int setMaxmum() 设置进度条最大值 int setMinmum() 设置进度条最小值 int setVakue() 设置进度条当前值
//创建进度条并实现其事件处理 // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class AWT11_19 extends JFrame { private JProgressBar bar; private JButton but; private Container c; private JLabel label; public AWT11_19() super("进度条演示程序 "); c=getContentPane(); c.setLayout(new FlowLayout()); bar=new JProgressBar(); but=new JButton(" 执行演示 "); c.add(but); bar.setForeground(Color.blue); c.add(bar); label=new JLabel();
but.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { if(bar.getValue()!=bar.getMaximum()) bar.setValue(bar.getValue()+10); else bar.setValue(bar.getMinimum()); } }); but.addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e){ label.setText("Progress bar minimum:"+bar.getMinimum() +"Maxmun"+bar.getMaximum()+"Value:"+bar.getValue()); //显示进度状态 } setSize(350,150); show(); public static void main(String args[]){ AWT11_19 app=new AWT11_19(); app.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } });
练习与习题 1、如何来制作图形界面?它需要引入哪些包? 2、分别使用AWT包和swing 包制作标签和按钮,试说出它们的区别? 3、在java中,什么是事件?简述处理事件的机制。 4、说明JCheckBox和JRadioButton的区别/ 5、设计一个包含有文本框和标签的窗口,在文本框中输入一段文字按回车键后,使这段文字内容加到标签的文字框中。 6、试用下拉列表框实现学校和地址的对应关系? 7、说明JTextField和JTextArea之间的区别?编制一个程序来实现在JTextField对象中输入字符,单击按钮将其复制到JTextArea对象中。 8、使用AWT包调用Font字体,改变标签中的文本字体。 9、编制一个使用JList组件实现第5题中的要求。