单击此处编辑母版标题样式,单击此处编辑母版文本样式,Java,实用教程(第,3,版),第,10,章,Swing,组件及应用,10.1,窗口,JFrame,10.2 Swing,常用组件,(1),10.3 Swing,常用组件,(2),10.4 Swing,常用组件,(3),10.5 Swing,常用组件,(4),10.6,综合实例,10.1,窗口,JFrame,JFrame,是带标题的顶层窗口,它继承,java.awt.Frame,,但两者是有区别的。,JFrame,不能直接通过,add(),方法加入组件,也不能直接通过,setLayout,(),方法设置布局管理器。每个,JFrame,都有一个与之关联的内容面板(,contentPane,),只能针对这个,contentPane,设置布局管理器及加入组件,例如下面的代码片段:,JFrame,jFrame,=new,JFrame,();,Container,contentPane,=,jFrame.getContentPane,();,contentPane.setLayout(new,GridLayout(2,1);,contentPane.add(jLabel,);,contentPane.add(jButton,);,jFrame.seContentPane(jPanel,);,【,例,10.1,】,创建,JFrame,窗体,在,窗体上,添加两个,JLabel,和,JButton,。,10.1,窗口,JFrame,程序运行结果如图,10.1,所示。,图,10.1,一个,JFrame,10.2 Swing,常用组件,(1),10.2.1,按钮,所有的按钮(,Button,)组件都继承自,AbstractButton,类,包括复选框,(,JCheckBox,),、普通按钮,(,JButton,),、单选按钮,(,JRadioButton,),、甚至菜单项,(,JMenuItem,),等。在按钮中可以显示图标,,ImageIcon,类表示图标。,AbstractButton,提供了以下和设置图标有关的方法:,setIcon(Icon,icon),:设置按钮有效状态下的图标。,setRolloverIcon(Icon,icon),:设置鼠标移动到按钮区域的图标。,setPressedIcon(Icon,icon),:设置按下按钮时的图标。,setDisabledIcon(Icon,icon),:设置按钮无效状态下的图标。,【,例,10.2,】,创建两个,JButton,,让其中一个,JButton,在各个状态下使用不同的,图标,。,10.2.1,按钮,说明,:程序的,getClass().getResource(“image0.jpg”),方法从当前路径下加载图片文件,程序运行结果如图,10.2,所示。图中共有两个按钮,,jbt1,按钮显示图标,,jbt2,按钮能够控制,jbt2,按钮是否有效。,图,10.2 Button,的使用,10.2.2,JTextField,与,JTextArea,文本框是具有输入单行文本和编辑功能的组件。把文本框添加到窗口中的常用方法是把它添加到面板或其他容器中,例如下面的代码片段:,JPanel,jPanel,=new,JPanel,();,JTextField,text=new,JTextField(“default,input”,20);,jPanel.add(text,);,这段代码将添加一个文本框,同时通过放入一个字符串“,default input,”来对它进行初始化,构造器的第二个参数设置文本框的宽度为,20,。,相比较,JTextField,,,JTextArea,可以输入多行文本。当在,JTextField,内输入回车时,将触发,ActionEvent,事件;但当在,JTextArea,中输入回车,仅仅意味着换行输入文本,并不会触发,ActionEvent,事件,应该使用另外的按钮或菜单来触发,ActionEvent,事件。,JScrollPane,表示带滚动条的面板,在默认的情况下,只有当面板的内容超过了面板的面积时,才会显示滚动条。,【,例,10.3】,求,a,到,b,之间的所有质数,每行显示,c,个。,a,、,b,、,c,的值由单行编辑框输入,结果在多行编辑框上显示,并显示,质数个数,。,10.2.2,JTextField,与,JTextArea,运行程序,在文本框中依次输入“,5,、,500,、,7,”,单击“求,a,到,b,之间的质数”按钮,将在文本区中显示,5,到,500,之间的所有质数,并计算出质数个数,显示在下面的文本框中,程序运行结果如图,10.3,所示。,图,10.3,计算,5,到,500,之间的质数,10.2.3,JCheckBox,和,JRadioButton,JCheckBox,表示复选框,用户可以同时选择多个选项。,JRadioButton,表示单选按钮,可以把多个单选按钮加入到一个按钮组,(,ButtonGroup,),,在任何时候,用户只能选择按钮组中的一个按钮。当用户选择了一个单选按钮时,将触发,ActionEvent,事件,由,ActionListener,来处理。,【,例,10.4,】,创建一个复选按钮和一个按钮组,按钮组中有多个单选按钮。选择的内容可在列表框中,显示,。,10.2.3,JCheckBox,和,JRadioButton,运行该程序,在文本框中输入姓名,选择性别和爱好,单击“,List,”按钮,则刚才操作的信息将显示在列表框中,单击“保存”按钮信息将保存到文件中,如图,10.4,所示。,图,10.4,按钮组合界面,10.2.4,列表框,(,JList,),列表框,JList,用于让用户在多个条目中作出选择,,JList,的,setSelectionMode(int,selectionMode,),方法用来设置列表框的选择模式,参数有以下可选值:,ListSelectionModel.SINGLE_SELECTION,:一次只能选择一项。,ListSelectionModel.SINGLE_INTERVAL_SELECTION,:允许选择连续范围内的多个项。如果用户选中了某一项,接着按住,Shift,键,单击另一个项,那么这两项之间的所有项都会被选中。,ListSelectionModel.MULTIPLE_INTERVAL_SELECTION,:这是列表框的默认选择模式。用户既可以选择连续范围内的多个项,也可以选择不连续的多个项。只要按住,Ctrl,键,单击列表框的多个项,这些项都会被选中。,当在列表框中选择一些项时,将触发,ListSelectionEvent,事件,,ListSelectionListener,监听器负责处理该事件。,【,例,10.5,】,创建一个列表框,采用默认的,MULTIPLE_INTERVAL_SELECTION,选择模式。在构造方法,JList(months,),中的,months,参数传入所有,选项,。,10.2.4,列表框,(,JList,),运行程序,选择右边列表的元素,结果将显示在左边的文本区域中,结果如图,10.5,所示。,图,10.5,列表框界面,10.3 Swing,常用组件,(2),10.3.1,菜单条,(,JMenuBar,),菜单的组织方式为:一个菜单条,JMenuBar,中可以包含多个菜单,JMenu,,一个菜单,JMenu,中可以包含多个菜单项,JMenuItem,。有一些支持菜单的组件如,JFrame,、,JDialog,都有一个,setJMenuBar(JMenuBar,bar),方法。可以用这个方法来设置菜单条。,【,例,10.6,】,创建两个菜单,多个菜单项。当选择某一菜单项时,在窗口中显示不同的卡片,同时在窗口底部显示所选的,菜单项,。,程序的运行结果如图,10.6,所示。,图,10.6,一个,JMenuBar,10.3.2,弹出式菜单,(,JPopupMenu,),下面的代码创建一个带有标题的,JPopupMenu,:,JPopupMenu,myJPopupMenu,=new,JPopupMenu,(“,菜单,“,);,可以使用,add(),方法或,insert(),方法向,JPopupMenu,中添加或者插入,JMenuItem,与,JComponent,。,JPopupMenu,对添加到其中的每一个菜单项都赋予一个整数索引,并根据弹出式菜单的布局管理器调整菜单项显示的顺序。此外,还可以使用,addSeparator,(),方法添加分割线,并且,JPopupMenu,也会为该分割线指定一个整数索引。若鼠标事件是平台的弹出式菜单触发事件,则调用弹出式菜单对象的,show,方法来显示弹出式菜单。下面的,showJPopupMenu,方法在收到触发器事件就会显示弹出式菜单,代码如下:,public void,showJPopupMenu(MouseEvent,e),if(,e.isPopupTrigger,()/,若鼠标事件是平台的弹出式菜单,则触发事件,myJPopupMenu.show(ivoker,e.getX(),e.getY,();,弹出式菜单事件的判断,建议放在鼠标按下,(,mousePressed,),及释放,(,mouseReleased,),中进行。,【,例,10.7,】,创建一个弹出式,菜单,。,10.3.2,弹出式菜单,(,JPopupMenu,),运行程序,右击鼠标显示弹出式菜单,如图,10.7,所示。,图,10.7,弹出式菜单界面,10.3.3,页签面板,(,JTabbedPane,),页签面板,JTabbedPane,可以用来存放许多标签页,而每一张标签页又可以存放不同的容器或组件,用户只要单击每一张标签页上的标签,便可切换至不同的标签页。与页签面板,JTabbedPane,关联的事件一般是:,ChangeEvent,,该事件所对应的接口是,ChangeListener,,该接口提供了一个方法,stateChanged(ChangeEvent,e),,当选择某个标签页时将调用该方法。多数情况下,页签面板仅仅是存放容器或组件的,一般不再需要响应用户的操作,因此不需要给页签面板,JTabbedPane,注册监听器。,【,例,10.8,】,创建一个页签面板,存放三个,组件,JTextArea,、,JList,、,JTextField,。,10.3.3,页签面板,(,JTabbedPane,),运行程序,出现标签页面板,单击第二个标签页,出现,12,个月份的英文单词,如图,10.8,所示。,图,10.8,标签页面板,10.3.4,工具栏,(,JToolBar,),工具栏是现代图形用户界面几乎必备的组件之一,目的是将菜单中一些常用的功能用带文字和图标的按钮形式在窗口上显示出来,以方便用户使用。工具栏一般可以让用户随意拖到窗口的四周,或自成一个窗口。,【,例,10.9,】,为例,10.6,添加工,具栏,。,运行程序,在工具栏中单击第三个按钮,运行结果如图,10.9,所示。,图,10.9,使用工具栏,10.4 Swing,常用组件,(3),10.4.1,表格,(,JTable,),【,例,10.10】,表格的使用,本例的运行界面如图,10.16,所示。窗口上有一个表格、两个按钮、三个标签,三个标签分别自动显示表格中的当前单元格所在的行、列、数据值,单击“插入”按钮,将在表格末尾添加一个空行,单击“删除”按钮,将把表格中的当前行删除。表格使用了,MouseEvent,事件来自动捕获当前单元格所在的行、列及,数据值,。,程序运行结果如图,10.10,所示。,图,10.10,使用表格,JTable,10.4.2,树状视图,(,JTree,),由于树型视图,JTree,本身没有滚动条,所以象,JList,、,JTable,一样,需要将,JTree,加到,JScrollPane,中。树型视图,JTre