《图形界面设计1.pptx》由会员分享,可在线阅读,更多相关《图形界面设计1.pptx(125页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1.组件和容器2.GUI(图形用户界面)布局管理器3.事件处理(举例:一个计算器的图形界面的程序)图形界面设计图形界面设计第1页/共125页1组件和容器Java库提供两种类型的组件第一代组件Java.AWT组件(Abstract Window Toolkit)(适合Applet小程序)第二代组件Javax.Swing组件第2页/共125页AWT的核心内容是组件和容器组件通常为图形用户界面中的可见部分,例如按钮(button)和标签(label)等通过add()方法可将组件加入容器并显示出来。容器是图形用户界面中容纳其他组件的部件,一个容器中可容纳组件或容器。常见容器:对话框(Dialog)、框
2、架(Frame)、窗口(Window)和面板(Panel)。第3页/共125页组件自身不能构成独立的图形界面,必须放到容器对象中。组件和容器的关系组件和容器的关系组件的定位n容器中组件的位置由容器的布局管理器(Layout Manager)决定。第4页/共125页列表列表按钮按钮菜单菜单container另一个窗口另一个窗口窗口,对话框窗口,对话框container第5页/共125页基本组件和容器的类层次JContainerJWindowJPanelJComponentJFrameJDialogJAppletJButtonJMenuJCheckboxJTextfield第6页/共125页常见的
3、的容器常用的容器有:对话框(JDialog)、框架(JFrame)、窗口(JWindow)和面板(JPanel)。JContainerJWindowJFrameJDialogJAppletJPanel第7页/共125页创建简单框架FrameFrame框架(Frame)类是Window类的子类,它是一种带标题框并且可以改变大小的窗口。构造方法Frame(String)可以创建Frame的实例,它带有标题框,构造方法中的String型参数指定了标题内容。第8页/共125页import java.awt.*;public class MyFrame extends Framepublic stati
4、c void main(String args)MyFrame fr=new MyFrame(HelloOutThere!);fr.setSize(400,200);fr.setBackground(Color.blue);fr.setVisible(true);public MyFrame(String str)super(str);.这里调用来自Component类的setSize()方法第9页/共125页使 用 从 Component类 继 承 过 来 的 setSize()方法可以改变Frame实例的大小。必须调用setVisible()方法和setSize()方法才能使Frame的实
5、例可见。第10页/共125页创建面板面板(Panel)与框架类似,也是一种容器,可以容纳其他GUI组件。当一个Panel对象被创建之后,使用Container类的add()方法将它加入到某个Window对象或Frame对象中。第11页/共125页面板示例import java.awt.*;public class FrameWithPanel extends Frame public FrameWithPanel(String str)super(str);public static void main(String args)FrameWithPanel fr=new FrameWithPa
6、nel(Frame with Panel);Panel pan=new Panel();构造函数第12页/共125页 fr.setSize(300,200);fr.setBackground(Color.blue);fr.setLayout(null);pan.setSize(100,100);pan.setBackground(Color.yellow);fr.add(pan);fr.setVisible(true);第13页/共125页Javax.swing.JFrame例程:import java.awt.*;import javax.swing.*;public class MyJFr
7、ame extends JFramepublic MyJFrame(String str)super(str);public static void main(String args)MyJFrame fr=newMyJFrame(MyJframe);nJFrame=Frame+Container第14页/共125页 Container con=fr.getContentPane();/获得面板 fr.setSize(300,300);con.setBackground(Color.red);JPanel pan=new JPanel();pan.setSize(100,100);pan.se
8、tBackground(Color.yellow);con.setLayout(null);con.add(pan);fr.setVisible(true);第15页/共125页常见的组件JContainerJComponentJButtonJMenuJCheckboxJTextfield第16页/共125页JButton组件JButton类 构造函数:JButton();JButton(String label)常见的方法:void setLabel(String Label)/设置按钮的标记 String getLabel()/获取按钮的标记取消取消确定确定第17页/共125页import
9、 javax.swing.*;import java.applet.Applet;public class MyJButton extends Applet public void init()JButton b1=new JButton(按钮1);JButton b2=new JButton();b2.setLabel(按钮2);add(b1);add(b2);第18页/共125页标签 JLabel类作用:一般显示提示信息,用户不能修改构造函数:public JLabel()JLabel(String s)JLabel(String s,int alignment)主要方法:String g
10、etString()/返回标签内容Void setText(String s)/设置标签文本String getAlignment()/返回标签得对齐方式第19页/共125页文本框JTextField类作用:生成一个单行文本域构造函数:JTextField()JTextField(String s)JTextField(int col)JTextField(String s,int col)主要方法:void setText(String t)String getText()/获取响应字符第20页/共125页综合例子import java.awt.*;import javax.swing.*;
11、public class JLogin public static void main(String args)JFrame f=new JFrame(User Login);Container con=f.getContentPane();con.setBackground(Color.lightGray);con.setLayout(new FlowLayout();JLabel lb1=new JLabel(UserID);JTextField T1=new JTextField(linda,20);第21页/共125页 JLabel lb2=new JLabel(Password);J
12、TextField T2=new JTextField(20);JButton b1=new JButton(OK);JButton b2=new JButton(Cancel);con.add(lb1);con.add(T1);con.add(lb2);con.add(T2);con.add(b1);con.add(b2);f.setSize(280,150);f.setVisible(true);第22页/共125页 文本域JTextAreaJTextAreaswing的JTextArea类可生成一个多行的文本域,内容超出显示范围时,具有滚动显示的功能。TextArea类的构造函数:1.p
13、ublic JTextArea(String text)2.public JTextArea(int rows,int columns)3.public JTextArea(String text,int rows,int columns)第23页/共125页TextArea类的常用方法:1.public void append(String str)2.public int getColumns()3.public int getRows()4.public void insert(String str,int pos)5.public void replaceRange(String st
14、r,int start,int end)注意:JTextArea和JList组件 必须放在JScrollpane中JFrameJScrollPanelJTextArea第24页/共125页程序举例:编写testJTextArea.java程序,通过文件输入流将该文件从硬盘读入内存并显示在多行文本框中第25页/共125页import java.awt.*;import javax.swing.*;import javax.swing.text.*;import java.io.*;public class testJTextArea public static void main(String
15、args)testJTextArea obj=new testJTextArea();obj.testArea();public void testArea()JFrame frame=new JFrame(Test);Container con=frame.getContentPane();JTextArea ta=new JTextArea(5,30);/支持滚动的容器组件 JScrollPane pane=new JScrollPane(ta);con.add(pane,BorderLayout.CENTER);第26页/共125页 try /打开文件 FileReader Rin=ne
16、w FileReader(“./testJTextArea.java);ta.read(Rin,null);catch(Exception e)System.exit(0);frame.setSize(200,200);/设置框架大小frame.setVisible(true);/显示框架 转到布局管理器转到布局管理器第27页/共125页复选框javax.Swing.JCheckBox构造函数:1.public JCheckBox(String S)2.public JCheckBox(String S,booleanselected)单选框单选框javax.Swing.JRadioButto
17、nn构造函数:构造函数:1.public JRadioButton(String S)2.public JRadioButton(String S ,boolean selected)第28页/共125页作用:将相互独立的单选框构成一组,常用方法:1.public ButtonGroup()2.public void add(AbstractButton b):作用:将一个单选按钮加到ButtonGroup组件中。3.public int getButtoncount()4.public void remove(AbstractButton b)Javax.Swing.ButtonGroup类
18、类第29页/共125页两种选择框举例import java.awt.*;import java.applet.Applet;import javax.swing.*;public class testJCheckRadioBox extends Applet JCheckBox jcb1,jcb2;JRadioButton jr1,jr2;第30页/共125页 ButtonGroup group1;JPanel p1;public void init()JPanel pCh=new JPanel();JPanel pRa=new JPanel();p1=new JPanel();jcb1=ne
19、w JCheckBox(Computer,true);jcb2=new JCheckBox(English,true);jr1=new JRadioButton(female,true);jr2=new JRadioButton(male,false);第31页/共125页 ButtonGroup group=new ButtonGroup();group.add(jr1);group.add(jr2);/不能将group加入到applet。p1.setLayout(new GridLayout(2,1);pCh.add(jcb1);pCh.add(jcb2);pRa.add(jr1);pRa
20、.add(jr2);p1.add(pCh);p1.add(pRa);add(p1);PChPRa第32页/共125页列表框:JList类(1)Jlist组件必须放在JScrollPane中,否则不具滚动功能。(2)构造函数public JList()Public Jlist(Object object)第33页/共125页import java.awt.*;import javax.swing.*;public class testJList public static void main(String args)testJList obj=new testJList();obj.testJL
21、ist();public void testJList()String book=Java,C+,Fortrain,DataBase,OperationSystem;JList list1=new JList(book);JFrame frame=new JFrame(TestList);Container con=frame.getContentPane();JScrollPane sp=new JScrollPane(list1);con.setLayout(new BorderLayout();con.add(sp,Center);frame.setSize(50,100);frame.
22、setVisible(true);第34页/共125页菜单制作JMenuBar类Jmenu类JmenuItem类第35页/共125页简单的菜单程序import javax.swing.*;public class testJMenu extends JFrameJMenuBar bar;JMenu fileMenu;JMenuItem InputMItem,modifyMItem;JMenuItem queryMItem,deleteMItem;testJMenu(String s)super(s);bar=new JMenuBar();fileMenu=new JMenu(菜单选项);第36
23、页/共125页Input Item=new JMenuItem(录入学生信息);modifyMItem=new JMenuItem(修改学生信息);queryMItem=new JMenuItem(查询学生信息);deleteMItem=new JMenuItem(删除学生信息);fileMenu.add(InputMItem);fileMenu.add(modifyMItem);fileMenu.add(queryMItem);fileMenu.add(deleteMItem);bar.add(fileMenu);This.setJMenuBar(bar);setVisible(true);
24、public static void main(String args)testJMenu s=new testJMenu(菜单窗体);第37页/共125页弹出式菜单第38页/共125页JPopupMenu JMenuItem第39页/共125页弹出式菜单的简单程序import javax.swing.*;import java.awt.*;public class pop2 JFrame f;JPopupMenu popUp;JMenuItem openMItem,copyMItem,pasteMItem;public pop2()f=new JFrame(弹出菜单);popUp=new J
25、PopupMenu(File);openMItem=new MenuItem(open);copyMItem=new JMenuItem(copy);pasteMItem=new JMenuItem(paste);第40页/共125页 popUp.add(openMItem);popUp.add(copyMItem);popUp.add(pasteMItem);f.setSize(300,200);f.setVisible(true);popUp.show(f,100,100);public static void main(String args)pop2 s=new pop2();转到转到
26、3事件处理事件处理第41页/共125页第九章 二、二、GUIGUI布局管理器布局管理器第42页/共125页01243401534第43页/共125页一个简单的例子import java.awt.*;public class ExGui private Frame f;private Button b1;private Button b2;public static void main(String args)ExGui that=new ExGui();that.go();第44页/共125页public void go()f=new Frame(GUI example);f.setLayou
27、t(new FlowLayout();b1=new Button(Press me);b2=new Button(Dont press Me);f.add(b1);f.add(b2);f.pack();f.setVisible(true);第45页/共125页Java语言中包含以下几种布局管理器:FlowLayout(流布局)Panel类和Applet类的默认布局管理器。BorderLayout(边框布局)Window类、Dialog类和Frame类的默认布局管理器。GridLayout(网格布局)CardLayout(卡片布局)GridBagLayout(网格包布局)第46页/共125页Fl
28、owLayout布局管理器 FolowLayout(Applet、Panel和Jpanel);作用作用:将组件按加入的先后顺序从左至右,由上而下排列;FlowLayoutFlowLayout布局的对齐方式:布局的对齐方式:采用三个常量表示采用三个常量表示:FlowLayout.LEFT FlowLayout.RIGHT FlowLayout.CENTER第47页/共125页FlowLayout.CENTERFlowLayout.LEFTFlowLayout.RIGHT第48页/共125页常用构造函数如下:1 public FlowLayout()/默认居中对齐,垂直和水平间隔为5。2.publ
29、ic FlowLayout(int align )/指定对齐方式的FlowLayout构造函数例:FlowLayout(FlowLayout.LEFT)第49页/共125页import java.awt.*;public class MyFlow private Frame f;private Button button1,button2,button3;public static void main(String args)MyFlow mflow=new MyFlow();mflow.go();第50页/共125页public void go()f=new Frame(Flow Layou
30、t);f.setLayout(new FlowLayout();button1=new Button(Ok);button2=new Button(Open);button3=new Button(Close);f.add(button1);f.add(button2);f.add(button3);f.setSize(100,100);f.setVisible(true);第51页/共125页BorderLayout布局BorderLayout布局是将空间划分为东、西、南、北、中五个区域;表示为:East、West、South、North和Center。第52页/共125页BorderLay
31、out的构造函数如下:1.public BorderLayout()/组件的垂直和水平间隔为0。2.public BorderLayout(int hgap,int vgap)如:将一个按钮加到框架的南部f=newFrame(FrameTitle);b=newButton(PressMe);f.add(b,South);第53页/共125页程序举例import java.awt.*;public class ExGui2 private Frame f;private Button be,bw,bn,bs,bc;public static void main(String args)ExGui
32、2 that=new ExGui2();that.go();void go()f=new Frame(Border Layout);be=new Button(East);bs=new Button(South);第54页/共125页 bw=new Button(West);bn=new Button(North);bc=new Button(Center);/f.setLayout(new BorderLayout();/Frame 默认的布局方式BorderLayoutf.add(be,East);f.add(bs,South);f.add(bw,West);f.add(bn,North)
33、;f.add(bc,Center);f.setSize(350,200);f.setVisible(true);第55页/共125页GridLayout布局管理器GridLayout(网格式的布局管理器)将容器空间划分成若干行乘若干列的网格,组件从左往右,由上而下依次放入其中,每个组件占据一格。第56页/共125页GridLayout类的构造函数:1.public GridLayout()/生成一个行数为1的GridLayout布局管理器对象。2.public GridLayout(int rows,int cols)3.public GridLayout(int rows,int cols,
34、int hgap,int vgap)如:new GridLayout(3,2),可以创建一个三行乘两列的布局管理器。第57页/共125页import java.awt.*;public class GridEx private Frame f;private Button b1,b2,b3,b4,b5,b6;public static void main(String args)GridEx that=new GridEx();that.go();void go()f=new Frame(Gridexample);f.setLayout(new GridLayout(3,2);第58页/共12
35、5页b1=new Button(b1);b2=new Button(b2);b3=new Button(b3);b4=new Button(b4);b5=new Button(b5);b6=new Button(b6);f.add(b1);f.add(b2);f.add(b3);f.add(b4);f.add(b5);f.add(b6);f.pack();f.setVisible(true);f.setLayout(new GridLayout(3,2,10,10);第59页/共125页CardLayout布局管理器CardLayout是一种卡片式的布局管理器,它将容器中的组件处理为一系列卡片
36、,每一时刻只显示出其中的一张。(略)第60页/共125页第61页/共125页package graph;import java.awt.*;import java.awt.event.*;public class CardLayoutDemo extends Frame String names=white,red,yellow;Color colors=Color.WHITE,Color.RED,Color.YELLOW;Label labels=new Label3;Button buttons=new Button3;Panel northP=new Panel();Panel cent
37、erP=new Panel();Panel cardP=new Panel3;GridLayout gridLay=new GridLayout(1,3);CardLayout cardLay=new CardLayout();ActionListener Listener=new ActionListener()public void actionPerformed(ActionEvent event)Button button=(Button)event.getSource();cardLay.show(centerP,button.getLabel();第62页/共125页public
38、CardLayoutDemo(String title)super(title);northP.setLayout(gridLay);centerP.setLayout(cardLay);for(int i=0;ibuttons.length;i+)buttonsi=new Button(namesi);buttonsi.addActionListener(Listener);labelsi=new Label(+i);northP.add(buttonsi);cardPi=new Panel();cardPi.setBackground(colorsi);cardPi.add(labelsi
39、);centerP.add(cardPi,namesi);add(northP,BorderLayout.NORTH);add(centerP,BorderLayout.CENTER);setSize(300,300);setVisible(true);public static void main(String args)new CardLayoutDemo(Hello);第63页/共125页举例1:计算器的界面设计FrameTextFieldPane第64页/共125页import java.awt.*;public class calculate2 Button key0,key1,ke
40、y14,key15;TextField txtAnswer;Panel p;Frame f;public static void main(String args)calculate2 calGUI=new calculate2();calGUI.go();第65页/共125页public void go()f=new Frame(“计算器”);p=new Panel();txtAnswer=new TextField(0,20);key0=new Button(0);key15=new Button(.);p.setLayout(new GridLayout(4,4);p.add(key0)
41、;p.add(key15);f.setSize(200,200);f.setLayout(new BorderLayout();/默认BorderLayout f.add(txtAnswer,“North”);f.add(p,South);f.setVisible(true);第66页/共125页n2图形界面布局举例图形界面布局举例2nComponentExp.java第67页/共125页n如何布局呢?如何布局呢?nScrollPaneln Paneln固定宽度的PanelnScrollnPaneln固定尺寸的panel第68页/共125页 frame.getContentPane().add
42、(sclpan_All,Center);sclpan_All.getViewport().add(pan_All);pan_All.setLayout(new BorderLayout();/左右分列 pan_All.add(pan_Right,East);/右边 pan_All.add(pan_Left,Center);pan_Right.setLayout(new BorderLayout();pan_Right.add(pan_RightUp,North);pan_Right.add(pan_RightDown,Center);/用一个pane充满整个右下角;第69页/共125页 pan
43、_RightUp.setLayout(new GridLayout(6,1);pan_RightUp.add(txt_ID);pan_RightUp.add(txt_Name);pan_RightUp.add(pane_Sex);pan_RightUp.add(cmb_Province);pan_RightUp.add(cmb_City);pan_RightUp.add(new JButton(ok);frame.setSize(50,100);frame.setVisible(true);第70页/共125页有时需要设置JPanel的大小,而JPanel的setSize()方法不管用。在设置
44、JPanel大小的时候,要用JPanel.setPreferredSize()这个方法才行例如:pLeft.setPreferredSize(new Dimension(300,400);第71页/共125页绘图操作:java.awt.Graphics类作用:作用:进行绘图操作进行绘图操作GraphicsGraphics类的常见方法类的常见方法:(1)(1)绘制字符串绘制字符串drawString(String str,int x,int y)drawString(String str,int x,int y)(2)(2)绘制线绘制线drawLine(x1,y1,x2,y2)drawLine(
45、x1,y1,x2,y2)xy0第72页/共125页(3)(3)绘制矩形绘制矩形drawRec(x,y,width,height)drawRec(x,y,width,height)fillRec(x,y,width,height)fillRec(x,y,width,height)clearRect(x,y,width,heigth)/clearRect(x,y,width,heigth)/清除一个矩形清除一个矩形(4)(4)绘制椭圆绘制椭圆drawOval(x,y,width,height)drawOval(x,y,width,height)fillOval(x,y,width,height)f
46、illOval(x,y,width,height)(5)(5)颜色管理颜色管理Color getColor()/Color getColor()/获取当前颜色获取当前颜色setColor(Color c)setColor(Color c)第73页/共125页绘图容器:Java.awt.Comonent的子类例例:Panel Frame AppletComonent类的两个方法()void paint(Graphics g)作用:在组件上使用g来绘图()repaint()作用:自动调用paint()方法重新绘图第74页/共125页如果声明的类本身就是Component的子类则覆盖paint(方法
47、)import java.awt.*;public class testGraphic extends Frameextends Framepublic static void main(String args)testGraphic x=new testGraphic();x.setSize(100,100);x.setVisible(true);public void paint(Graphics g)g.drawLine(0,0,100,100);第75页/共125页n如果声明的类不是nComponent的子类呢?第76页/共125页使用getGraphics()方法获得Graphics
48、对象import java.awt.*;public class testGraphics2 public static void main(String args)Frame f=new Frame(myframe);f.setVisible(true);f.setSize(100,100);Graphics g=f.getGraphics();g.drawLine(0,0,100,100);第77页/共125页举例:举例:显示时间和日期介绍两个类:1.类名:java.util.Date Date timeNow=new Date();Date tomorrow=new Date(2005,
49、05,10)2.类名java.awt.Font Font msgFont=new Font(“TimesRoman”,Font.ITALIC,30);第78页/共125页import java.awt.*;import java.util.Date;public class showdateP extends Panel public static void main(String args)Frame f=new Frame(日期);showdateP SP =new showdateP();f.add(SP,“Center”);/SP是一个Panel f.setSize(500,100);
50、f.setVisible(true);第79页/共125页public void paint(Graphics g)Date timeNow=new Date();Font msgFont=new Font(TimesRoman,Font.ITALIC,30);g.setFont(msgFont);g.setColor(Color.blue);g.drawString(timeNow.toString(),5,50);第80页/共125页nimport java.awt.*;import java.util.*;npublic class TestDraw extends Panel n pu