一、文本域JTextArea
提供了一个区域,用于操作多行文本。
与JTextField不一样,JTextArea不具有动作事件。
JTextArea中的文本的改变,可通过另一 个GUI组件触发的事件来处理。
JTextArea不会提供滚动条,因此要显示完整的内容,需要为文本域加载滚动条。
二、BoxLayout布局管理器
将GUI组件沿容器的x轴水平放置,或者沿容器的Y轴垂直放置。Box容器默认采用BoxLayout。
通过Box类的静态方法,createHorizontalBox()返回Box容器的引用,所创建的Box包含水平BoxLayout,会将组件按照添加它们的顺序从左到右排列。
通过Box类的静态方法 createVerticalBox () 返回Box容器的引用,所创建的Box包含垂直 BoxLayout,会将组件按照添加它们的顺序从上到下排列。
三、Box中的透明组件
Box中如果要调整组件之间的空间,会使用Box提供的透明组件作为填充来填充组件之 间的空间。
Box 容器提供了 4 种透明的组件,分别是:rigid area;strut;glue;filler。
Strut:用户只能定义一个方向的尺寸,即水平方向 或者垂直方向,可用于精确设定组件之间的距离。
filler:是 Box 的内部类,它与 rigid area 相似, 都可以指定水平或者垂直的尺寸,但是它可以设置最小,最大和优先尺寸。
Glue:当用户将 glue 放在两个控件之间时,它会尽可能的占据两个控件之间的多余空间,从而将 两个控件挤到两边。
rigid area:是一种用户可以定义水平和垂直尺寸的透 明组件。该方法将一个固定区域rigid area添加到容器,固定区域是一个不可见的GUI组件, 具有固定的像素高度和宽度。
四、GridBagLayout布局管理器
同GridLayout类似,在容器中以网格形 式来管理组件,但是功能比GridLayout 强大:
(1)GridBagLayout管理的所有行和列都可以是大小不同的。
(2)GridLayout把每个组件限制到一个单元格 ,GridBagLayout中组件在容器中可以占据任意大小的矩形区域。
GridBagLayout多了一个约束的概念。可以这样理解,由于GridBagLayout对于 内部的单元格的定制性很强,所以,此布局需要设置很多属性,而这些属性就被抽 象成为GridBagConstraints对象,其中的所有成员都是public的。
GridBagConstraints.anchor:当组件小于其显示区域时,用于确定将组件置于在显示区域的何处。NORTH ;SOUTH ;WEST ;EAST ; NORTHWEST ;NORTHEAST ; NORTHWEST ;NORTHEAST ; SOUTHWEST ;SOUTHEAST ;CENTER。
GridBagConstraints.fill:当组件的显示区域大于组件的所需大小时,用于确定是否(以及如何)调整组件。
GridBagConstraints.NONE:默认值。
GridBagConstraints.HORIZONTAL:加宽组件直到它足以在水平方向上填满其显示区域,但不更改其高度。
GridBagConstraints.VERTICAL:加高组件直到它足以在垂直方向上填满其显示区域 ,但不更改其宽度。
GridBagConstraints.BOTH:使组件完全填满其显示区域。
GridBagConstraints.gridx; GridBagConstraints.gridy
指定组件左上角的行和列,最左边的列是gridx=0,最上边的行是 gridy=0,实际上就是从(0, 0)开始的坐标。
GridBagConstraints.gridwidth; GridBagConstraints.gridheight
指定组件的显示区域行(针对 gridwidth)或列(针对 gridheight)中的单元数。默认值为 1。
GridBagConstraints.weightx; GridBagConstraints.weighty
份量用来决定在行(weightx)与列(weighty)它们各自之间如何分配空间。当 利用额外空间时,栅格会变得更宽/高。
比如weightx的值分别为10,20,30,则在 容器的x方向也就是列的方向,按一定的比例分配三个网格单元,其中加权值越大网格单元就越大。值的大小是没有关系的,加权值的作用是让容器以设定的值的比例在横向和纵向分配网格,且在容器的大小改变时这个比例不改变。
当只有一个组件设置权重值(weightx/weighty)时,其他组件不参与空间分配,所有多余的空间都留给该组件。
五、滑块JSlider
使用户能从某个整数值范围内进行选择。是带刻度线和滑块的一个JSlider。
JSlider可以是水平方向,也可以是垂直方向的。滑块的相对位置表示JSlider的当前值。
对水平方向的,最小值就是它的左端,最大值就是它的右端。对垂直方向的,最小值就是它的底端,最大值是它的顶端。JSlider的setInveted(true)方法可以颠倒JSlider的最小最大值的位置。
JSlider会产生ChangeEvent,响应用户的交互。处理该事件的监听者是实现了ChangeListener 接口,并实现了其中stateChanged方法的对象。
六、菜单
Swing中菜单只能被绑定到提供了 setJMenuBar方法的类的对象上,这样的两个类是:JFrame;JApplet。
七、Swing 菜单构成
菜单栏:JMenuBar
包含管理菜单栏所需要的方法,是菜单的容器。
菜单:JMenu
包含管理菜单所需要的方法,其中可包含菜单项,或包含其他菜单,其他菜单成为其子菜单。
菜单项:
JMenuItem:包含管理菜单项所需要的方法。是菜单中的交互组件,当它被选中时,会发生 ActionEvent。
JCheckBoxMenuItem:包含管理能够被切换成开或关的菜单项所需的方法。当选中JCheckBoxMenuItem时,会在菜单 项左边出现复选标记;再次选择则删除复选标 记。
JRadioButtonMenuItem:包含管理能够被切换成开或关的菜单项所需的方法。多个JRadioButtonMenuItem被当作ButtonGroup的一部分维护时,一个时刻只有组中的一个项会被选中。
菜单栏是所有菜单和菜单项的根。
八、JPopupMenu
弹出式菜单。当用户按下或者释放鼠标右键时,会发生弹出式触发器事件。
九、鼠标事件
任何派生自java.awt.Component的 GUI组件,都能捕获鼠标事件。
用于处理鼠标事件(MouseEvent)的接口:(1)MouseListener (2) MouseMotionListener。
当鼠标与某个Component交互时,如果这个Component注册了恰当的事件监听器,则会调用上述两个接口中定义的方法处理各式的鼠标事件。