第8章Swing组件1Word文档格式.docx
《第8章Swing组件1Word文档格式.docx》由会员分享,可在线阅读,更多相关《第8章Swing组件1Word文档格式.docx(59页珍藏版)》请在冰豆网上搜索。
//设置标题
this.setBounds(50,50,200,150);
//获得与JFrame关联的contentPane,contentPane默认的布局管理器是BorderLayout
ContainercontentPane=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.2Jpanel
JPanel是使用最多的组件之一,它是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(int
tabPlacement)
创建一个空的TabbedPane,使其按照tabPlacement值指定选项卡的布局
publicJTabbedPane
(int
tabPlacement,int
tabLayoutPolicy)
创建一个空的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.event.*;
importjavax.swing.event.*;
classJTabbedPaneTestextendsJFrame{
privateJTabbedPanejtabbedpane=newJTabbedPane();
privateJTextFieldjtextField=newJTextField();
publicJTabbedPaneTest(Stringtitle){
//添加六个选项卡
jtabbedpane.addTab("
第一页"
newJPanel());
第二页"
第三页"
第四页"
第五页"
第六页"
//注册监听器
jtabbedpane.addChangeListener(newMyChangeListener());
contentPane.add(jtextField,BorderLayout.SOUTH);
contentPane.add(jtabbedpane,BorderLayout.CENTER);
this.setSize(300,200);
//命名内部类处理Change事件
privateclassMyChangeListenerimplementsChangeListener{
publicvoidstateChanged(ChangeEvente){
Stringtemp=jtabbedpane.getTitleAt(jtabbedpane.getSelectedIndex());
jtextField.setText(temp+"
被选择"
}
publicclassTest8_2{
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.4JScrollPane
JSCrollPane又称滚动面板,可以用于当窗口中的内容大于窗口时,在窗口的右边和下边设置滚动条,借助滚动条就可以看到整个窗口的内容。
JSCrollPane的直接父类为JComponent。
JSCrollPane提供了四个构造方法用于创建JSCrollPane类对象,见下表。
表8-2JSCrollPane构造方法
JScrollPane()
创建一个空的JSCrollPane对象
JScrollPane(Component
view)
创建JSCrollPane对象,并加入一个view组件,当组件内容大于显示区域时自动产生滚动条
JScrollPane(int
vsbPolicy,
int
hsbPolicy)
创建有水平滚动条和垂直滚动条的JSCrollPane对象
view,
int
vsbPolicy,int
创建有水平滚动条和垂直滚动条的JSCrollPane对象,并在其内加入一个view对象
有关JSCrollPane的例子我们在其他用到JSCrollPane的地方进行介绍,这里不单独举例了。
8.2按钮控件
图8-1中有一个AbstractButton类,该类是Swing中所有按钮的父类,该类的三个直接派生类JButton、JToggleButton和JMenuItem。
JButton与AWT中的Button类似,JButton有一个直接子类为BasicArrowButton,是一个带有箭头的按钮(箭头有上、下、左、右四个方向)。
JToggleButton表示一个切换按钮,该类有两个直接子类是我们经常使用到的,JRadioButton—单选按钮和JCheckBox—复选按钮。
JMenuItem包括三个直接子类,它们都是与菜单相关的按钮。
程序[例8-3]演示了各个按钮的用法。
[8-3]
importjavax.swing.plaf.basic.BasicArrowButton;
classButtonsTestextendsJFrame{
privateJButtonjbutton=newJButton("
JButton"
privateBasicArrowButton
basicArrowButtonUp=newBasicArrowButton(BasicArrowButton.NORTH),
basicArrowButtonDown=newBasicArrowButton(BasicArrowButton.SOUTH),
basicArrowButtonLeft=newBasicArrowButton(BasicArrowButton.WEST),
basicArrowButtonRight=newBasicArrowButton(BasicArrowButton.EAST);
privateJToggleButtonjtoggleButton=newJToggleButton("
JToggleButton"
privateJCheckBoxjcheckBox=newJCheckBox("
JCheckBox"
privateJRadioButtonjradioButton=newJRadioButton("
JRadioButton"
publicButtonsTest(Stringtitle){
contentPane.add(jbutton);
contentPane.add(basicArrowButtonUp);
contentPane.add(basicArrowButtonDown);
contentPane.add(basicArrowButtonLeft);
contentPane.add(basicArrowButtonRight);
contentPane.add(jtoggleButton);
contentPane.add(jcheckBox);
contentPane.add(jradioButton);
this.pack();
publicclassTest8_3{
newButtonsTest("
java各种按钮测试"
运行结果如下。
图8-4例8-3运行结果
所有按钮组件单击时都可触发ActionListener事件,如果需要对这些按钮做某些处理,可构造事件处理器实现ActionListener进行事件处理。
JRadioButton和JCheckBox在编程中经常使用到,我们会在8.4节选择组件中详细介绍。
8.3文本输入
在java中,能够用于文本输入的组件包括JTextField(文本框)、JTextArea(文本区)以及JPasswordField(密码框),JLabel(标签)不支持文本输入,但可以容纳文本。
8.3.1JTextFileld文本框
JTextField文本框是一个允许编辑单行文本的swing组件,JTextField提供了多个构造方法用于创建JTextField对象。
具体见下表8-3。
表8-3JTextField构造方法
publicJTextField()
构造一个新的TextField。
初始字符串为null,列数为0
publicJTextField(String
text)
构造一个用指定文本初始化的新TextField。
列数为0
publicJTextField(int
columns)
构造一个具有指定列数的新的空TextField。
初始字符串为null。
publicJTextField
(String
text,int
构造一个用指定文本和列初始化的新TextField。
text:
文本值,columns:
列数
JTextField有两个重要的方法setText(Stringt)和getText()分别用于设置文本框的显示文本和获取当前文本框的文本。
不过这两个方法都不是JTextField本身提供的方法,而是其父类JTextComponent所提供的。
JTextField类可引发ActionEvent事件,当用户在文本框中按下回车键时触发。
8.3.2JTextArea文本区
JTextArea文本区是一个允许编辑多行文本的swing组件,JTextArea提供了多个构造方法用于创建JTextArea对象。
具体见下表8-4。
表8-4JTextArea构造方法
JTextArea()
构造新的TextArea。
初始字符串为null,行/列设置为0。
JTextArea(String
构造显示指定文本的新的TextArea。
行/列设置为0
JTextArea(int
rows,
构造具有指定行数和列数的新的空TextArea。
初始字符串为null
text,
rows,int
构造具有指定文本、行数和列数的新的TextArea。
文本值,rows:
行数,columns:
因为JTextArea是JTextComponent的直接子类,因此与JTextField一样,也可以通过setText(Stringt)和getText()方法设置和获取文本区的文本值。
JTextArea类可引发ActionEvent事件,当用户在文本区中按下回车键时触发。
8.3.3JPasswordField密码框
在AWT组件中,并没有单独的密码框组件,而是通过TextField的一个setEchoChar()方法来得到密码框,但在Swing中则单独通过一个类JPasswordField来表示。
密码框是文本框JTextField组件的简单扩展。
因此,其构造方法与JTextField相类似,这里不再介绍。
JPasswordField类中有几个重要方法,如下:
表8-5JPasswordField类常用构造方法
成员方法
publicchar[]getPassword()
获得密码的字符数组表示,用来替代getText()方法
publicvoidsetEchoChar(char
c)
设置此JPasswordField的回显字符
publicchargetEchoChar()
返回要用于回显的字符
8.3.4JLabel标签
JLabel是一个静态组件,该组件可以显示一行静态文本,一般只是一个说明性的文字,而不接受用户的输入,也无事件响应。
JLabel提供了如下方法用于构建JLabel对象
表8-6JLabel构造方法
JLabel()
创建无图像并且其标题为空字符串的JLabel类对象
JLabel(Icon
image)
创建具有指定图像的JLabel类对象
publicJLabel(Icon
image,
horizontalAlignment)
创建具有指定图像和水平对齐方式的JLabe类对象
JLabel(String
创建具有指定文本的JLabel类对象
text,Icon
icon,
创建具有指定文本、图像和水平对齐方式的JLabel类对象
创建具有指定文本和水平对齐方式的JLabel类对象
构造方法中各参数意义
Image:
显示在JLabel上的图标。
horizontalAlignment:
JLabel上文字的对齐方式,其值为int枚举型,值包括SwingConstants.LEFT、SwingConstants.CENTER、SwingConstants.RIGHT、SwingConstants.LEADING和SwingConstants.TRAILING。
显示在JLabel上的文字。
以下的例8-4演示了本节中所介绍的各个组件的用法,界面可提供用户输入用户名和密码,按下回车后在JTextArea显示区显示用户输入的用户名和密码信息,不允许用户名或密码为空。
[例8-4]
classTextInputTestextendsJFrame{
privateJTextFielduserName=newJTextField(10);
privateJTextAreata=newJTextArea(4,10);
privateJPasswordFieldpassword=newJPasswordField(10);