《java 使用Swing组件一.ppt》由会员分享,可在线阅读,更多相关《java 使用Swing组件一.ppt(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、JavaJava语言与语言与JBuilderJBuilder应用初步应用初步第十三章第十三章 使用使用SwingSwing组件组件一一 本章要点本章要点顶级容器组件顶级容器组件通用容器组件通用容器组件专用容器组件专用容器组件基本控件基本控件不可编辑组件不可编辑组件交互的格式组件交互的格式组件文本组件文本组件顶级容器组件l框架框架是一个图形界面程序的主窗口在Java中,每个具有图形界面的程序至少要有一个框架,小程序有时也会使用框架框架是由边框、标题栏、最大化、最小化、还原、移动、关闭按钮、系统菜单,以及内容窗格组成内容窗格是框架的核心区域,主要的图形界面组件、菜单栏、工具栏都在内容窗格中顶级容器
2、组件l框架框架是一个程序的主窗口,每个具有图形界面的程序都至少要有一个框架如果程序中还有其它窗口,并且这些窗口依赖于框架的,则应使用对话框(JDialog)如果要使其它窗口显示在框架的内部,则应该使用内部框架(JInternalFrame)内部框架虽然和框架很象,但它不是顶级容器组件,而是专用的容器组件顶级容器组件l框架框架是JFrame类的对象。创建并显示一个框架的步骤如下:创建一个JFrame对象,此时框架尚未显示在添加了组件之后,调用pack函数排列组件调用它的setVisible函数以显示框架 FrameDemoFrame frame=new FrameDemoFrame();fram
3、e.setTitle(FrameDemo-框架功能演示);frame.pack();frame.setVisible(true);顶级容器组件l框架标题用来描述程序,它显示在框架的标题栏上,以及系统的任务栏上有两种设定框架标题的方法l利用setTitle函数设定标题l在构造函数中设定标题调用框架的setTitle函数,如下所示:frame.setTitle(FrameDemo-框架功能演示);顶级容器组件l框架利用setIconImage函数为程序设置图标String imgURL=myicon.gif;ImageIcon icon=new ImageIcon(imgURL);frame.se
4、tIconImage(icon.getImage();顶级容器组件l框架关闭程序的方法1:将关闭窗口操作设为退出程序:frame.setTitle(FrameDemo-框架功能演示);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.pack();顶级容器组件l框架参数代表关闭时的操作,可以有如下值:lWindowConstants.DO_NOTHING_ON_CLOSE:不做任何事,用窗口监听器进行关闭工作lWindowConstants.HIDE_ON_CLOSE:隐藏界面,这是框架和对话框对象的默认操作lWindowCo
5、nstants.DISPOSE_ON_CLOSE:隐藏窗口,并且释放它使用的资源,这是内部框架对象的默认操作lJFrame.EXIT_ON_CLOSE:退出应用程序,这种退出方式只能用于应用程序的主框架中顶级容器组件l框架方法2:编写窗口监听器类,在窗口关闭事件中关闭程序,如下面的代码所示:frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);frame.addWindowListener(new FrameDemoFrame_WindowListener_Closing(frame);顶级容器组件l框架例题:在
6、退出程序时,要求用户确认:public void windowClosing(WindowEvent e)int returnValue;returnValue=JOptionPane.showConfirmDialog(null,确实要退出程序吗?,退出程序,JOptionPane.YES_NO_OPTION);if(returnValue=JOptionPane.YES_OPTION)System.exit(0);调用此函数时会自动弹出一个对话框,要求用户确定是否退出程序顶级容器组件l框架在框架中加入组件的方法:用getContentPane函数获得内容窗格在内容窗格中用add函数加入各种
7、组件JPanel contentPane;contentPane=frame.getContentPane();JPanel panel1=new JPanel();contentPane.add(panel1);panel1.add(new JLabel(请点击下面的按钮:);panel1.add(new JButton(关闭);顶级容器组件l框架主程序框架一般还有菜单栏。主程序中的菜单栏通过setJMenuBar函数来设定:JMenuBar menuBar=new JMenuBar();frame.setJMenuBar(menuBar);JMenuBar是菜单对象,实际中还需要在其中加入
8、菜单项和菜单子项关于菜单,后面还会有详细介绍顶级容器组件l框架可以通过setBounds函数来实现setSize,setLocation这两个函数的功能:public void setBounds(int x,int y,int width,int height);Rectangle r=new Rectangle(int x,int y,int width,int height);public void setBounds(Rectangle r);顶级容器组件l框架setLocationRelativeTo函数,它的作用是将框架放到屏幕上一个现有的组件旁边:public void setL
9、ocationRelativeTo(Component c);其中c是一个已经在屏幕上显示的组件此函数将框架放到组件c的旁边,放置原则是让放置的框架尽量靠近屏幕中间如果函数参数为null,那么就将框架居中放置,这是常用的一种将窗口居中放置的方法顶级容器组件l对话框对话框是另一类常用的顶级容器对话框与框架非常相似,复杂的对话框也能够实现框架的几乎所有功能实际中,常用的是界面简单、功能高度特化的对话框l消息框:显示一条消息l选择框:让用户进行选择l文件选择框:选择文件进行打开、保存等操作l颜色选择框:从调色板中选择颜色顶级容器组件l对话框每个对话框都必须依附于框架l框架关闭以后,所有依附它的对话框
10、也会关闭l当框架最小化成一个图标的时候,所有依附它的对话框也会自动隐藏l当框架还原的时候,对话框又会自动显示l这些操作由Swing自动实现本小节主要介绍通用的对话框(JDialog)和消息框(JOptionPane)顶级容器组件l对话框例:在主框架程序中添加一个通用对话框,里面有一个文字标签和一个按钮:public void showDialog2()JDialog dialog=new JDialog(this,对话框);JPanel panel1=new JPanel();dialog.getContentPane().add(panel1);panel1.add(new JLabel(这
11、是一个对话框。);panel1.add(new JButton(点击这里);dialog.pack();dialog.setVisible(true);顶级容器组件l对话框对话框分为有模式的和无模式的两种类型有模式的对话框在显示时,将屏蔽用户向对话框所属的主框架键入的所有内容,用户不能对主框架进行任何操作无模式对话框在显示时,用户仍然可以用鼠标点击主框架,在主框架里输入内容,或移动主框架缺省的JDialog对话框都是无模式对话框顶级容器组件l对话框如果要创建有模式对话框,可以在构造函数里增加一项如下:JDialog dialog=new JDialog(this,对话框,true);也可以用s
12、etModal函数来设置对话框是有模式的还是无模式的:dialog.setModal(true);/将对话框设置成有模式的 dialog.setModal(false);/将对话框设置成无模式的顶级容器组件l对话框消息框(JOptionPane)是一种非常简洁、专用的对话框。例:弹出一个提示消息框:JOptionPane.showMessageDialog(frame,修改已经保存到文件中。);弹出的消息框如下图所示:顶级容器组件l对话框消息框中的图标:l预设的图标有4种:错误图标、消息图标、警告图标和提问图标l可以显示自己定制的图标不同界面风格下的图标风格:lWindows风格顶级容器组件l
13、对话框不同界面风格下的图标风格(续):lJava风格lCDE/Motif风格lGTK+风格顶级容器组件l对话框常用消息框的调用:消息框:利用静态函数showMessageDialog显示确认框:利用静态函数showConfirmDialog显示选择框:利用静态函数showOptionDialog显示输入框:利用静态函数showInputDialog显示顶级容器组件l对话框showMessageDialog(显示消息框):消息框是最简单的一种对话框,它的作用只是显示一条消息,它只有一个“确认”按钮,用以关闭消息框。通过修改showMessageDialog函数的参数,可以修改消息框显示的消息、图
14、标和消息框的标题,下面列出常用的消息框形式顶级容器组件l对话框顶级容器组件l对话框顶级容器组件顶级容器组件l对话框showMessageDialog是一个静态成员函数,可以从类直接调用,它有三种形式:static void JOptionPane.showMessageDialog(Component parentComponent,Object message)static void JOptionPane.showMessageDialog(Component parentComponent,Object message,String title,int messageType)stati
15、c void JOptionPane.showMessageDialog(Component parentComponent,Object message,String title,int messageType,Icon icon)顶级容器组件l对话框int messageType:消息框类型,有下列值:顶级容器组件l对话框showConfirmDialog(显示确认框):显示一个对话框,让用户选择“是”或“否”,用户选择的结果在返回值中给出:int choice=JOptionPane.showConfirmDialog(frame,你是否真的要删除文件?);执行程序,在屏幕上显示的确认框
16、如下:顶级容器组件l对话框点击“是”,“否”,“撤销”都会关闭确认框,同时返回一个值:l“是”对应的返回值是JOptionPane.YES_OPTIONl“否”对应的返回值是JOptionPane.NO_OPTIONl“撤销”的返回值JOptionPane.CANCEL_OPTION可以通过用条件语句比较返回值来确认用户点击的是哪个按钮,再进行下一步操作。showConfirmDialog是一个静态成员函数,可直接通过类来调用顶级容器组件l对话框顶级容器组件l对话框showOptionDialog(显示选择框):用于显示定制的对话框,它是参数最多、使用最灵活的JOptionPane类对话框可以
17、在对话框上显示多个按钮每个按钮的文字可以自己定制对话框中还包括图标、提示字符串甚至可以在对话框中加入组件顶级容器组件l对话框例:一个定制的对话框:String options=小说,诗歌,不告诉你;int choice=JOptionPane.showOptionDialog(frame,如果将你放逐到荒岛,你最希望带本什么书?,问卷调查,JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,new ImageIcon(about.png),options,options2);顶级容器组件l对话框showInputDialo
18、g(显示输入框):该函数弹出一个对话框,提示用户输入一行文字,或者从下拉框中选择一项输入框有很多用法,常用的有:l输入一行文字l带有缺省值的文本输入l从下拉框中选择一项内容顶级容器组件l对话框例,用于输入文字的对话框:String rtnStr=JOptionPane.showInputDialog(frame,如果将你放逐到荒岛,你最希望带本什么书?);输入文字,然后回车或单击“确认”,输入的文字会保存在rtnStr所指向的字符串里如果按了“Esc”键,或单击“撤销”,那么键入的文字不会保存,rtnStr的值为空顶级容器组件l对话框可以在输入框中给出输入文字的默认值:String rtnSt
19、r=JOptionPane.showInputDialog(frame,如果将你放逐到荒岛,你最希望带本什么书?,小说);这条语句在屏幕上显示的对话框如下:顶级容器组件l对话框也可以定制对话框的标题和图标类型:String rtnStr=JOptionPane.showInputDialog(frame,如果将你放逐到荒岛,你最希望带本什么书?,问卷调查,JOptionPane.WARNING_MESSAGE);在屏幕上显示的对话框如下,注意此时不能设定输入的默认字符串。顶级容器组件l对话框可以用下拉框的形式选择内容:String inputOptions=小说,诗歌,不告诉你;Object
20、rtnStr=JOptionPane.showInputDialog(this,如果将你放逐到荒岛,你最希望带本什么书?,问卷调查,JOptionPane.QUESTION_MESSAGE,null,inputOptions,诗歌);对应对话框如下图所示,缺省值是第二项:顶级容器组件l对话框例:带缺省值的定制文本框:Object rtnStr=JOptionPane.showInputDialog(this,如果将你放逐到荒岛,你最希望带本什么书?,问卷调查,JOptionPane.QUESTION_MESSAGE,null,null,诗歌);通用容器组件l面板面板是最常用的容器组件。缺省情况
21、下,面板上除了背景色以外没有任何东西可以用多个面板,配合不同的布局管理器来配置控件在界面上的布局通用容器组件l滚动条面板滚动条面板可以在屏幕上有限的区域内显示更大范围的内容,例如:通用容器组件l滚动条面板相应的代码如下:JScrollPane scrollPane=new JScrollPane(textArea1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);scrollPane.setPreferredSize(new Dimension(250,250);创建滚动条面板的过程分
22、两步:l第一步,创建一个JScrollPane对象,在构造函数中需要给出放在面板里的控件l第二步,设置面板的初始大小通用容器组件l滚动条面板滚动条的状态通过6个常量来表示:通用容器组件l分隔条面板分隔条面板将一个面板分为两部分,两部分之间被一个分隔条隔开,用户可以拖动分隔条来改变左右面板的大小,如下图所示:通用容器组件l分隔条面板分隔条面板由JSplitPane对象实现左右两部分分别是两个子面板,子面板一般是滚动条面板下面的代码用来创建分隔条面板:JSplitPane split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,scrolll,scroll
23、2);split.setDividerSize(8);split.setOneTouchExpandable(true);getContentPane().add(split,BorderLayout.CENTER);通用容器组件l标签页面板通用容器组件l标签页面板创建标签页面板的程序代码如下:JTabbedPane tabbed=new JTabbedPane();tabbed.addTab(第一页,null,scrolll,这是第一页内容);tabbed.addTab(第二页,null,scroll2,这是第二页内容);第一步:创建一个JTabbedPane对象,使用缺省的构造函数即可第二
24、步:调用addTab函数将子面板一个个加到标签页中通用容器组件l标签页面板通用容器组件l工具栏工具栏是图形界面程序常用的组件,它将一组按钮排成一行,放在程序的顶端工具栏一般作为菜单栏的补充,为菜单栏中常用的命令提供一种快捷的执行方法通用容器组件l工具栏工具栏通过JToolBar对象来实现:JToolBar toolBar=new JToolBar();toolBar.add(button1);toolBar.add(button2);frame.getContentPane().add(toolBar,BorderLayout.PAGE_START);专用容器组件l工具栏工具栏中还可以设置分隔
25、条,分隔条将按钮分隔开,以达到分组的目的:分隔条通过addSeparator函数来添加,效果如下图所示:toolBar.add(button2);toolBar.addSeparator();toolBar.add(button3);专用容器组件l工具栏专用容器组件l内部框架内部框架常用于多文档界面,它的特点是在主框架的内部还有一系列子框架:专用容器组件l内部框架创建内部框架的基本步骤如下:(1)创建内部框架对象JInternalFrame subFrame1=new JInternalFrame(文档1,true,true,true,true);内部框架对象的构造函数有5个参数:l参数1:显
26、示在子框架标题栏上的名称;l参数2:设定子框架能否改变大小;l参数3:设定子框架能否关闭;l参数4:设定子框架能否最大化;专用容器组件l内部框架l参数5:设定子框架能否缩成一个图标。需要注意的是,子框架缩成的图标是在主框架的左下角,而不会在操作系统的任务栏出现:专用容器组件l内部框架(2)设置子框架对象的属性子框架的属性包括子框架大小、位置,显示子框架,将子框架设置成选中状态,如下面的代码所示:subFrame1.setSize(300,300);subFrame1.setLocation(30,30);subFrame1.setVisible(true);try subFrame1.setS
27、elected(true);catch(java.beans.PropertyVetoException e)专用容器组件l内部框架(3)将子框架放在桌面面板上子框架不能放在普通的面板上,必须放到桌面面板(JDesktopPane)上将桌面面板作为主框架的内容窗格,再将子框架放到桌面面板上,如下面的代码所示:JDesktopPane desktop=new JDesktopPane();desktop.setBackground(new Color(160,160,160);desktop.add(subFrame1);setContentPane(desktop);专用容器组件l内部框架通过这三步以后,内部框架界面就建立了内部框架不是真正的顶级容器框架但它也有自己的内容窗格,可以在其中放置各种面板和控件内部框架常用于多文档界面,例如同时打开多个文本文件或多个图片的情况专用容器组件l分层窗格分层窗格是一个可以有多层的容器,作用是让相互重叠的组件可以按照它们重叠的次序显示,上层的组件覆盖在下层组件之上l根窗格根窗格直属于顶级的框架或对话框,包含了内容窗格和菜单栏,以及分层窗格、玻璃窗格等不可见的功能窗格,它的作用是管理所有这些窗格
限制150内