Java学习笔记(第5天)

窗体是一个组件容器,所有组件都必须有窗体去承载它们。JFrame是Swing技术中的窗体类,在开发应用程序时可以通过集成java.swing.JFrame类创建一个窗体,在这个窗体中添加组件,同时为组件设置事件监听器,处理一些最大化、最小化、关闭、调整大小等窗体事件。

定义自己的窗体的最常用方法就是集成JFrame类并扩展为自己的窗体类,这个扩展的窗体类应该定义好窗体的界面和时间监听以及所有业务处理方法。

JFrame窗体类包含一个容器类,所有放置在窗体上的组间实际上都是放置在这个容器类中的,这个容器作为JFrame类的一个封装属性,通过getContentPane()方法可以获取它。

JFrame窗体默认是不可见的,在初始化窗体界面后,一定要使用setVisible(true)方法设置窗体为可见状态,否则无法显示窗体。

创建窗体时使用了JFrame类的默认构造方法。常用构造方法包括两种形式:public JFrame();public JFrame(String title)。分别为无参的构造方法和有参的构造方法。第一种构造方法创建一个初始不可见、没有标题的新窗体;第二种构造方法创建一个不可见,但具有标题的窗体。

创建窗体后,需要给予窗体一个关闭方式,可以调用setDefaultCloseOperator()方法关闭窗体。Java为窗体关闭提供了几种形式,常用的有两种形式,这两种操作实质是一个int类型的常量,被封装太javax.swing.WindowConstants接口中。

WindowsConstants接口中操作常量的说明
常量 说明
DO_NOTHING_ON_CLOSE 该操作什么都不做,也不关闭窗体
HIDE_ON_CLOSE 这是窗体对象的默认关闭方式,它只将窗体隐藏,再次显示窗体时,回复原样
DISPOSE_ON_CLOSE 销毁窗体对象,并关闭窗体
EXIT_ON_CLOSE 退出程序,并关闭窗体

Swing是单线程的,所有与组件绘制有关的操作都必须在单一线程中完成,这个线程就是事件队列线程。EventQueue类的invokeLater()方法可以将Swing组件相关操作的线程加入事件队列中,这样可以把界面绘制与业务处理线程分开,避免执行业务处理时导致界面出现卡死或假死现象。

Swing提供的常用布局管理器。包括绝对布局管理器、流布局管理器、边界布局管理器和网格布局管理器。

使用绝对布局的步骤:使用Container.setLayout(null)方式取消布局管理器,使用Component.setBounds()方法设置每个组件的大小与位置。在使用绝对布局之前,需要调用容器的setLayout(null)方法告知编译器这里不再使用布局管理器。其中,JFrame窗体需要调用getContentPane()方法获取窗体容器,再设置容器的布局方式。

流布局管理器在整个容器中的布局是指像“流”一样按指定的方向摆放组件,直到占据了这一行的所有空间,然后再向下移动一行。默认情况下,组件在每一行上都是居中排列的,但是通过设置也可以更改组件在每一行上的排列位置。

FlowLayout类中具有以下常用的构造方法:public FlowLayout()、public FlowLayout(int alignment)、public FlowLayout(int alignment,int horizGap,int vertGap)。构造方法中alignment参数是组件在每一行具体摆放的对齐方式,分别为FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHT。在public FlowLayout(int alignment,int horizGap,int vertGap)构造方法中还存在horizGap与vertGap两个参数,这两个参数分别以像素为单位指定组件之间的水平间隔与垂直间隔。

JFrame窗体的组件容器使用BorderLayout布局管理器作为默认布局方式,即不设置布局管理器的情况下就默认使用BorderLayout。该布局管理器将组件放置在顶部、底部、左边、右边和中间5个区域中。容器调用Container类的add()方法添加组件时可以设置此组件在边界布局管理器中的不同区域,区域的控制可以由BorderLayout类中的常量来决定,分别为BorderLayout.NORTH、BorderLayout.SOUTH、BorderLayout.EAST、BorderLayout.WEST、BorderLayout.CENTER。

网格布局管理器将容器划分为网格,所有组件可以按行和列进行排列。在网格布局管理器中,每一个组件的大小都相同,并且网格中单元格的个数由网格的行数和列数决定。网格布局管理器主要有两种常用构造方法:public GridLayout(int rows,int columns);public GridLayout(int rows,int columns,int horizGap,int vertGap)。rows和和columns参数代表网格的行数和列数,这两个参数只有一个参数可以为0,代表一行或一列可以排列任意多个组件。参数horizGap与vertGap指定组件之间的间距;其中horizGap参数指定网格之间的水平间距,vertGap参数指定网格之间的垂直间距。

JPanel面板可以聚集一些组件进行布局,其也是一种容器,因为它也继承自java.awt.Container类。还可以设置布局管理器,将面板中的组件布局。

在设置界面时,可能要在一个较小的容器窗体中显示一个较大部分的内容,这时可以使用JScrollPane面板。JScrollPane面板是带滚动条的面板,JScrollPane也是一种容器,但是JScrollPane常用语布置单个组件,并且不可以使用布局管理器。如果需要在JScrollPane面板中放置多个组件,需要将多个组件放置在JPanel面板上,然后将JPanel面板作为一个整体组件添加到JScrollPane组件上。

标签由JLable类定义,它的父类为JComponent类。标签可以显示一行只读文字、一个图像或带图像的文本,它并不能产生任何类型的事件,只是简单地显示文本和图片,但是可以使用标签的特性指定标签上文本的对齐方式。

JLabel类提供了多种构造方法,这样可以创建多种标签:

JLabel类构造方法的说明
构造方法 说明
JLabel() 创建一个不带图标和文本的JLabel对象
JLabel(Icon icon) 创建带图标的JLabel对象
JLabel(Icon icon,int aligment) 创建带图标的JLabel对象,并设置水平对齐方式
JLabel(String text,int alignment) 创建带文本的JLabel对象,并设置水平对齐方式
JLabel(String text,Icon icon,int alignment) 创建带文本、图标的JLabel对象,并设置标签内容的水平对齐方式

Swing中的图标可以放置在按钮、标签等组件上,用于描述组件的用途。图标可以由Java支持的图片文件类型进行创建也可以使用java.awt.Graphics类提供的功能方法来绘制。还可以使用某个特定的图片创建图标。利用javax.swing.ImageIcon类可以根据现有图片创建图标,ImageIcon类实现了Icon接口,同时Java支持多种图片格式。

ImageIcon类构造方法的说明
构造方法 说明
ImageIcon() 创建一个通用的ImageIcon对象,当真正需要设置图片时再使用ImageIcon对象调用setImage(Image image)方法来指定图片
ImageIcon(Image image) 直接从图片源创建图标
ImageIcon(Image image,Strign description) 除了可以从图片源创建图标之外,还可以为这个图标添加简短的描述,但这个描述不会在图标上显示,可以使用getDescription()方法获取这个描述
ImageIcon(URL url) 利用位于计算机网络上的图像文件URL地址创建图标

java.lang.Class类中的getResource()方法可以获取资源文件的URL路径。

Swing中提供了很多种按钮,包括提交按钮、复选框、单选框等,这些按钮都是从AbstractButton类中继承而来的。

普通按钮组件JButton,JButton类的常用构造方法:

JButton类构造方法的说明
构造方法 说明
JButton() 创建一个按钮,它没有指定按钮文本,也没有按钮图标
JButton(Icon icon) 创建一个带图标的按钮
JButton(String text) 创建一个带文本的按钮
JButton(String text,Icon icon) 创建一个带初始文本和图标的按钮

单选按钮组件JRadioButton,单选按钮有选中和未选中状态。其构造方法主要有:

JRadioButton类构造方法的说明
构造方法 说明
JRadioButton() 创建一个单选按钮,它没有指定按钮文本,也没有按钮图标
JRadioButton(Icon icon) 创建一个带图标的单选按钮
JRadioButton(String text) 创建一个带文本的单选按钮
JRadioButton(String text,Icon icon) 创建一个带初始文本和图标的单选按钮
JRadioButton(String text,boolean selected) 在创建待选按钮时指定文本与选中状态

单选按钮的组合使用需要使用ButtonGroup类将按钮分组,该类使用默认构造方法创建,通过add()方法将按钮添加到按钮组中。组合起来的多个单选按钮添加到按钮组后,同一时间只能有一个单选按钮被选中。

复选框组件JCheckBox可以添加到ButtonGroup对象中,添加方法是使用ButtonGroup类的add()方法,被添加到同一个ButtonGroup对象中的复选框和单选按钮,同一时间只能有一个组件处于选中状态。

文本框组件JTextField用来显示或编辑一个单行文本,在Swing中通过javax.swing.JTextField类可以创建文本框组件。常用的构造方法有:

JTextField类构造方法
构造方法 说明
JTextField() 构造一个默认的文本框组件
JTextField(Sting text) 构造一个包含指定字符串内容的文本框组件
JTextField(int columns) 构造一个具有指定列表的空的文本框组件
JTextField(String text,int columns) 构造一个具有指定列数并包含指定文本内容的文本框组件

如果将文本框使用绝对布局或者布局在限制组件大小的布局管理器中,columns将不起作用。文本框没有指定首选列数和文本内容时,文本框的宽度为0;在指定文本框列数之后,文本框的宽度是单列字符宽度与列数的乘积;在没有指定文本框列数的情况下,如果初始化了文本框的内容,那么文本框的长度是内容字符数量与单列字符宽度的乘积。

密码框组件JPasswordField是通过javax.swing.JPasswordField类创建的。其构造方法与JTextField类的构造方法相似。在JPasswordField类中提供一个setEchoChar()方法,可以改变密码框的回显字符,例如“#”。

文本域组件JTextArea,在程序中用于接收用户的多行文字输入。Swing中的文本区域组件是JTextArea类的实例对象。在JTextArea类中存在一个setLineWrap()方法,该方法用于设置文本域是否可以自动换行。如果将该方法的参数设置为true,文本域将自动换行,否则不自动换行,文本内容溢出程序界面时,可以使用滚动面板管理文本域。

Swing中提供两种列表组件,分别是下列列表组件JComboBox与列表框组件JList.Swing中的下列列表框使用JComboBox类创建,它是javax.swing.JComboBox类的子类。JComboBox类的常用构造方法有:

JComboBox类构造方法的说明
构造方法 说明
JComboBox() 创建具有默认数据模型的空的JComboBox
JComboBox(ComboBoxModel aModel) 创建一个JComboBox,其列表项目取自指定的ComboBoxModel
JComboBox(Object[] items) 创建包含指定数组中的元素的JComboBox
JComboBox(Vector<?> items) 创建包含指定Vector向量对象中元素的JComboBox

下拉列表中的内容可以被封装在ComboBoxModel类型、数组或Vector的实例对象中。ComboBoxModel为接口,它代表一般模型,可以自定义一个类实现该接口,然后在初始化JComboBox对象时向上转型为ComboBoxModel接口类型,但是必须实现如下两个方法:public void setSelectedItem(Object item)和public Object getSelectedItem()。其中setSelectedItem()方法是设置下列列表中的选项,getSelectedItem()方法用于返回下列列表中选择的项。自定义这个类除了实现该接口之外,还可以集成AbstractListModel类,在该类中也有两种操作下拉列表的重要方法:getSize():返回列表的长度;getElementAt(int index):返回指定索引处的值;addItem(Object anObject):为下拉列表框添加选项,anObject可以是字符串。

列表框组件JList,按住Shift键并选择列表框中的其他选项,可以连续选择两个选项之间的所有项目,也可以按住Ctrl键选择零散的个别项目。Swing中使用JList类对象来表示列表,常用的构造方法有:

JList类构造方法的说明
构造方法 说明
JList() 构造一个具有空的、只读模型的JList
JList(ListModel dataModel) 根据指定的非null模型对象构造一个显示元素的JList
JList(Object[] listData) 构造一个JList,使其显示指定数组中的元素
JList(Vector<?> listData) 构造一个JList,使其显示指定Vector向量对象中的元素

在初始化列表框后使用setListData()方法对列表框元素进行设置,也可以在初始化的过程中对列表框中的项目进行设置。设置的方式有3种类型,包括数组、Vector对象和ListModel对象。使用数组作为构造方法的参数时,首先需要床架列表项目的数组,再利用构造方法来初始化列表框,如果使用ListModel模型为参数,需要创建ListModel对象。ListModel是Swing包中的一个接口,它定义了获取列表属性的方法,但是为了使用户不必实现ListModel接口中的所有方法,通常自定义一个类继承实现该接口的抽象类AbstractListModel,并重写需要的方法。在这个类中提供了getElementAt()与getSize()方法,其中getElement()方法根据列表的索引获取列表中的值,而getSize()方法用于获取列表中的项目个数。

还可使用DefaultListModel类创建列表框。该类扩展了AbstractListModel类,所以也可以通过DefaultListModel对象向上转型为ListModel接口初始化列表框,同时DefaultListModel类提供了addElement()方法实现将内容添加至列表框中。

利用JProgressBar类可以实现一个进度条。它只不过是一个矩形组件,通过填充它的部分或全部来指示一个任务的执行情况。创建进度条的常用构造方法有:

JProgressBar类构造方法的说明
构造方法 说明
JProgressBar() 创建一个显示边框但不带进度字符串,最小值0、最大值100的水平进度条
JProgressBar(int orient) 创建具有指定SwingConstants.VERTICAL垂直或SwingConstants.HORIZONTAL水平方向的进度条
JProgressBar(int min,int max) 创建具有指定最小值和最大值的水平进度条
JProgressBar(int orient,int min,int max) 创建使用指定方向、最小值和最大值的进度条。

如果并不确定任务的执行进度,可以通过调用方法setIndeterminate(boolean b)设置进度条的样式,参数b设为true表示不确定任务的执行进度,设为false则表示确定任务的执行进度。默认情况下在进度挑中不显示提示信息,可以通过调用setStringPainted(boolean b)设置是否显示提示信息,true为显示,fasle为不显示。如果是将指示确定进度的进度条设置为显示提示信息,默认为显示当前任务完成的百分比,也可以通过方法setString(String s)设置指定的提示信息。如果是将指示不确定进度的进度条设置为显示提示信息,则必须设置指定的提示信息。如果采用指示确定进度的进度条,不能自动获取任务的执行进度,则必须通过方法setValue(int n)反复修改当前的执行进度。如果是采用指示不确定进度的进度条,则需要在任务执行完成后将其设置为采用指示确定进度的进度条,并将任务的执行进度设置为100,或者设置为指定已经完成的提示信息。

猜你喜欢

转载自blog.csdn.net/arpospf/article/details/79365349