首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

[通译]核心Swing组件(一)

2012-10-29 
[翻译]核心Swing组件(一)在第3章,我们简要介绍了JFC/Swing工程组件所用的Model-View-Controller(MVC)模式。

[翻译]核心Swing组件(一)

在第3章,我们简要介绍了JFC/Swing工程组件所用的Model-View-Controller(MVC)模式。在本章中,我们将会开始探讨如何使用许多可用组件中的关键部分。

所有的Swing组件都是以JComponent类为起点的。尽管Swing库的某些部分并不以JComponent类为根,但所有的组件在其继承的某些级别上共享JComponent类作为通用父类。JComponent类定义通用的行为与属性。在本章中,我们将会了解一些通用功能,例如组件绘制,自定义义,工具提示以及变化大小。

随着特定JComponent子孙类被关注 ,我们将会特别了解JLabel,JButton以及JPanel,三个更为广泛使用的Swing组件类。为了组件内显示图像,我们需要理解Icon接口,以及当使用预定义图像时的ImageIcon类与GrayFilter类的支持。另外,我们将会了解AbstractButton类,他是JButton类的父类。所有的AbstractButton的子类所共享的数据模型是ButtonModel接口;我们将会探讨这个接口及其特定实现,DefaultButtonModel。

4.1 JComponent类

JComponent类是所有的Swing组件继承的抽象基类。JComponent类有42个派生子类,每一个都继承了JComponent的功能。图4-1显示了继承层次结构。

尽管JComponent类是所有Swing组件的共同基类,但是Swing工程库中的许多类并不是由JComponent类派生类。这包括所有的高层窗口对象,例如JFrame,JApplet以及JInternalFrame;所有的MVC相关的类;事件处理相关的接口与类;等。所有这些类将会后面的章节中进行讨论。

尽管所有的Swing组件扩展JComponent,JComponent类扩展AWT的Container类,相应的,其扩展AWT的Component类。这就意味着许多的JComponent方面都是由AWT的Component与Container类所共享的。

4.1.1 组件分片

JComponent类定义了许多超出原始的AWT组件集合功能的AWT组件面。这包括自定义绘制行为以及自定义显示设置的不同方法,例如颜色,字体以及其他的客户端设置。

绘制JComponent对象

因为Swing的JComponent类是由Container类扩展而来的,因而会遵循基本的AWT绘制模型:所有的绘制都是通过paint()方法来完成的,而repaint()方法则用来触发更新。然而,许多任务的完成是不同的。JComponent类优化了绘制的许多方面从而改进性能与可扩展性。另外,RepaintManager类可以用来自定义绘制行为。

为了改进绘制性能与扩展性,JComponent将绘制操作分为三个任务。public void paint(Graphics g)方法被分为三个独立的protected方法调用。由调用的顺序,他们依次为paintComponent(g), paintBorder(g)以及paintChildren(g),通过原始的paint()调用传递Graphics参数。组件本身首先通过paintComponent(g)进行绘制。如果我们希望自定义Swing组件的绘制,我们可以重写paintComponent()方法而不是paint()方法。除非我们希望完全替换所有的绘制,我们需要首先调用super.paintComponent(),正如下面所示的,来获得默认的paintComponent()行为。

属性名?
数据类型?

可访问性

doubleBufferingEnabled?
boolean?

读写

doubleBufferMaximumSize
Dimension?

读写

尽管很少实现,提供我们自己的RepaintManager子类确实允许我们自定义屏幕脏区域的绘制机制,或者是当绘制完成时的最少跟踪。重写下面四个方法的一个可以允许我们自定义机制:

4.1.2 JComopnent属性

我们已经了解了一些不同的JComponent子类所共享的属性。现在是了解JavaBean属性的时候了。表4-2显示了JComponent所定义的完整属性列表,包括由AWT Container为戌Component类所继承的属性。

JComponent属性

属性名数据类型组件访问容器访问JComponent访问accessibleContextAccessibleContext

只读

N/A

只读

actionMap

ActionMap

N/A

N/A

读写

alignmentX

float

只读

只读

读写

alignmentY

float

只读

只读

读写

ancestorListeners

AncestorListener[]

N/A

N/A

只读

autoscrolls

boolean

N/A

N/A

读写

background

Color

读写绑定

N/A

只写

backgroundSet

boolean

只读

N/A

N/A

border

Border

N/A

N/A

读写绑定

bounds

Rectangle

读写

N/A

N/A

colorModel

ColorModel

只读

N/A

N/A

componentCount

int

N/A

只读

N/A

componentListeners

ComponentListener[]

只读

N/A

N/A

componentOrientation

ComponentOrientation

读写绑定

N/A

N/A

componentPopupMenu

JPopupMenu

N/A

N/A

读写

components

Component[]

N/A

只读

N/A

containerListeners

ContainerListener[]

N/A

只读

N/A

cursor

Cursor

读写

N/A

N/A

cursorSet

boolean

只读

N/A

N/A

debugGraphicsOptions

int

N/A

N/A

读写

displayable

boolean

只读

N/A

N/A

doubleBuffered

boolean

只读

N/A

读写

dropTarget

DropTarget

读写

N/A

N/A

enabled

boolean

读写

N/A

只写绑定

focusable

boolean

读写绑定

N/A

N/A

focusCycleRoot

boolean

N/A

读写绑定

N/A

focusCycleRootAncestor

Container

只读

N/A

N/A

focusListeners

FocusListener[]

只读

N/A

N/A

focusOwner

boolean

只读

N/A

N/A

focusTraversalKeyEnabled

boolean

读写

N/A

N/A

focusTraversalPolicy

FocusTraversalPolicy

N/A

读写绑定

N/A

focusTraversalPolicyProvider

boolean

N/A

读写绑定

N/A

focusTraversalPolicySet

boolean

N/A

只读

N/A

font

Font

读写绑定

只写

只写

fontSet

boolean

只读

N/A

N/A

foreground

Color

读写绑定

N/A

只写

foregroundSet

boolean

只读

N/A

N/A

graphics

Graphics

只读

N/A

只读

graphicsConfiguration

GraphicsConfiguration

只读

N/A

N/A

height

int

只读

N/A

N/A

hierarchyBoundsLIsteners

HierarchyBoundsListener[]

只读

N/A

N/A

hierarchyListeners

HierarchyListener[]

只读

N/A

N/A

ignoreRepaint

boolean

读写

N/A

to

热点排行