您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 第8章_Swing组件[1]
第8章Swing组件在第7章中,介绍了用AWT创建图形用户界面的基本原理。在java.awt包中,提供了各种具体的组件,如Frame、Panel、Button、Label等。AWT组件的优点是简单、稳定,同时兼容于任何JDK版本,缺点是依赖于本地操作系统的GUI,缺乏平台的独立性。为了实现跨平台,使得用java创建的图形界面在不同操作系统中保持相同的外观,从JKD1.2版本开始引入了Swing组件,这些组件位于javax.swing包中,SwingGUI组件定义了相对于java.awt包更多、更强的功能,可以使用户更加灵活方便的进行GUI的设计。Swing组件时用纯Java语言编写的,不依赖于本地操作系统的GUI,Swing组件可以跨平台运行。独立于本地平台的Swing组件被称为轻量级组件,而依赖于本地平台的AWT组件被称为重量级组件。多数Swing组件的父类为javax.swing.JComponent,JComponent的直接父类为java.awt.Container,与AWT中的Window与Panel处于同一个继承类层次。多数Swing组件类都是以大写字母“J”开头,图8-1显示了Swing组件的类层次结构。从图中可以看出,除JFrame外,其余的Swing组件都继承自JComponent类。图8-1Swing组件的类层次结构8.1容器组件8.1.1JFrameJFrame是用来替代AWT包中Frame的,可以实现与Frame相同的功能,包括作为容器容纳其他组件,显示组件等。[例8-1]importjavax.swing.*;importjava.awt.*;classJFrameTestextendsJFrame{privateJButtonbutton1=newJButton(button1);privateJButtonbutton2=newJButton(button2);publicJFrameTest(Stringtitle){super(title);//设置标题this.setBounds(50,50,200,150);//获得与JFrame关联的contentPane,contentPane默认的布局管理器是BorderLayoutContainercontentPane=this.getContentPane();contentPane.setLayout(newFlowLayout(5));contentPane.add(button1);contentPane.add(button2);this.setVisible(true);//设置JFrame对关闭按钮的处理方式this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}publicclassTest8_1{publicstaticvoidmain(String[]args){newJFrameTest(JFrame测试);}}程序运行界面如下:图8-2例8-1运行界面利用JFrame实现了与Frame相同的功能,但JFrame与Frame在使用上还是有很大区别的。(1)两者都可以添加其他组件到窗口中,Frame直接使用add方法添加相应的组件;JFrame则不能直接通过add方法添加组件,每个JFrame都有一个与之关联的内容面板(contentPane),只能针对这个contentPane添加相应组件。(2)两者都可以设置布局管理器,Frame直接使用setLayout即可设置;JFrame则需先得到其内容面板,对其内容面板设置布局管理器。(3)Frame要想关闭窗口需要编写相应的事件处理程序(见例7-12),而JFrame则不必编写事件处理程序,只需调用方法setDefaultCloseOperation(intoperation),通过设置operation的值来响应用户关闭窗体的操作,该方法的参数operation的值有以下三个。JFrame.DO_NOTHING_ON_CLOS:什么也不做JFrame.HIDE_ON_CLOSE:隐藏窗体,这是JFrame的默认选项JFrame.EXIT_ON_CLOSE:关闭窗体,结束程序8.1.2JpanelJPanel是使用最多的组件之一,它是AWT中Panel的替代组件。其默认的布局管理器是FlowLayout布局管理器。利用JPanel可以实现更为复杂的布局,如BorderLayout布局管理策略,只允许添加5个组件,那么我们可以在5个区域中添加5个JPanel,而每个JPanel又可以根据不同的布局管理策略添加多个组件,只要你愿意,可以添加任意多个你想添加的组件。时8.1.3JTabbedPane当窗口的组件元素过多时,我们可以将这些组件分组放到不同的页面中,java提供了JTabbedPane页签面板来实现。JTabbedPane包含多个选项卡,每个页面和一个选项卡相对应,每个选项卡又是一个容器(一般用JPanel类来封装),可以包含其他的GUI组件,选项卡可以显示图标和文本。当用户选择特定的标签后,就会显示相应的选项卡,并且会触发ChangeEvent事件,该事件由ChangeListener监听器响应。JTabbedPane提供了如下三个构造方法用于创建JTabbedPane类对象。表8-1JTabbedPane构造方法构造方法说明publicJTabbedPane()创建一个具有默认的JTabbedPane.TOP选项卡布局的空TabbedPane。publicJTabbedPane(inttabPlacement)创建一个空的TabbedPane,使其按照tabPlacement值指定选项卡的布局publicJTabbedPane(inttabPlacement,inttabLayoutPolicy)创建一个空的TabbedPane,使其具有指定的选项卡布局(tabPlacement值指定)和选项卡布局策略(tabLayoutPolicy指定)。构造方法中涉及的两个参数的含义及具体值如下:tabPlacement:选项卡布局,int枚举类型,值为JTabbedPane.TOP、JTabbedPane.BOTTOM、JTabbedPane.LEFT或JTabbedPane.RIGHT,分别表示将标签文本显示在上方、下方、左侧、右侧。tabLayoutPolicy:一行不能放置所有选项卡标签值时的放置策略,int枚举类型,值为JTabbedPane.WRAP_TAB_LAYOUT或JTabbedPane.SCROLL_TAB_LAYOUT。JTabbedPane.WRAP_TAB_LAYOUT—表示在容器中显示所有标签,如果一排内不能容纳,则把剩下的标签放到下一排。JTabbedPane.SCROLL_TAB_LAYOUT—只显示一排标签,剩下的标签可以通过滚动图标显示。[例8-2]中定义了一个JTabbedPaneTest类,在该类中添加了一个JTabbedPane类对象,为该类对象添加了六个选项卡,程序可以完成点击任何一个选项卡,在窗口下方的JTextField中显示出相应的选项卡的标题。[例8-2]importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.event.*;classJTabbedPaneTestextendsJFrame{privateJTabbedPanejtabbedpane=newJTabbedPane();privateJTextFieldjtextField=newJTextField();publicJTabbedPaneTest(Stringtitle){super(title);ContainercontentPane=this.getContentPane();//添加六个选项卡jtabbedpane.addTab(第一页,newJPanel());jtabbedpane.addTab(第二页,newJPanel());jtabbedpane.addTab(第三页,newJPanel());jtabbedpane.addTab(第四页,newJPanel());jtabbedpane.addTab(第五页,newJPanel());jtabbedpane.addTab(第六页,newJPanel());//注册监听器jtabbedpane.addChangeListener(newMyChangeListener());contentPane.add(jtextField,BorderLayout.SOUTH);contentPane.add(jtabbedpane,BorderLayout.CENTER);this.setSize(300,200);this.setVisible(true);}//命名内部类处理Change事件privateclassMyChangeListenerimplementsChangeListener{publicvoidstateChanged(ChangeEvente){Stringtemp=jtabbedpane.getTitleAt(jtabbedpane.getSelectedIndex());jtextField.setText(temp+被选择);}}}publicclassTest8_2{publicstaticvoidmain(String[]args){newJTabbedPaneTest(JTabbedPane测试);}}程序运行结果如图8-3左侧所示。将创建JTabbedPane类对象的无参构造方法修改为privateJTabbedPanejtabbedpane=newJTabbedPane(JTabbedPane.BOTTOM,JTabbedPane.SCROLL_TAB_LAYOUT);则程序运行结果如图8-3右侧图8-3例8-2运行结果事件处理中有如下一段代码:Stringtemp=jtabbedpane.getTitleAt(jtabbedpane.getSelectedIndex());getSelectedIndex()方法表示获得当前选择的选项卡的索引值(int类型,从0开始,-1表示未选中任何选项卡)。getTitleAt(index)方法表示获得索引值为index的选项卡的标题。8.1.4JScrollPaneJSCrollPane又称滚动面板,可以用于当窗口中的内容大于窗口时,在窗口的右边和下边设置滚动条,借助滚动条就可以看到整个窗口的内容。JSCrollPane的直接父类为JComponent。JSCrollPane提供了四个构造方法用于创建JSCrollPane类对象,见下表。表8-2JSCrollPane构造方法构造方法说明JScrollPane()创建一个空的JSCrollPane对象JScrollPane(Componentview)创建JSCrollPane对象,并加入一个view组件,当组件内容大于显示区域时自动产生滚动条JScrollPane(intvsbPolicy,inthsbPolicy)创建有水平滚动条和垂直滚动条的JSCrollPane对象JScrollPane(Componentview,intvsbPolicy,inthsbPolicy)创建有水平滚动条和垂直滚动条的JSCrollPane对象,并在其内加入一个view对象有关JSCrollPane的例子我们在其他用到JSCrollPane的地方进行介绍,这里不单独举例了。8.2按钮控件图8-1中有一个AbstractButton类,该类是Swing中所有按钮的父类,该类的三个直接派生类JButton、JToggleButton和JMenuItem。JButton与AWT中的Button类似,JButton有一个直接子类
本文标题:第8章_Swing组件[1]
链接地址:https://www.777doc.com/doc-6123683 .html