JComponent 类

除顶级容器外,所有名称以“ J”开头的 Swing 组件均来自JComponent类。例如JPanelJScrollPaneJButtonJTable都继承自JComponent。但是,JFrameJDialog并不是因为它们实现了顶级容器。

JComponent类扩展了Container类,该类本身扩展了ComponentComponent类包括从提供布局提示到支持绘画和事件的所有内容。 Container类支持将组件添加到容器中并进行布局。本节的API tables总结了ComponentContainer以及JComponent的最常用方法。

JComponent Features

JComponent类为其后代提供以下功能:

  • Tool tips

  • 绘画和边框

  • 应用范围内的可插拔外观

  • Custom properties

  • 支持布局

  • 支持可访问性

  • 支持拖放

  • Double buffering

  • Key bindings

  • Tool tips

    • 通过使用setToolTipText方法指定字符串,可以为组件的用户提供帮助。当光标停留在组件上时,指定的字符串 将显示在组件附近的小窗口中。有关更多信息,请参见如何使用工具提示
  • 绘画和边框

    • setBorder方法允许您指定组件在其边缘周围显示的边框。要绘制组件内部,请覆盖paintComponent方法。有关详情,请参见如何使用边框进行定制绘画
  • 应用程序范围内的可插入外观

    • 在幕后,每个JComponent对象都有一个对应的ComponentUI对象,该对象对该JComponent执行所有绘制,事件处理,大小确定等操作。究竟使用哪个ComponentUI对象取决于当前的外观,您可以使用UIManager.setLookAndFeel方法进行设置。有关详情,请参见如何设置外观
  • Custom properties

    • 您可以将一个或多个属性(名称/对象对)与任何JComponent关联。例如,布局 管理 器可能使用属性将约束对象与其 管理 的每个JComponent关联。您可以使用putClientPropertygetClientProperty方法放置和获取属性。有关属性的一般信息,请参见Properties
  • 支持布局

    • 尽管Component类提供了诸如getPreferredSizegetAlignmentX之类的布局提示方法,但它没有提供任何方法来设置这些布局提示,除非创建了子类并覆盖了这些方法。为了给您提供另一种设置布局提示的方法,JComponent类添加了 setter 方法-setMinimumSizesetMaximumSizesetAlignmentXsetAlignmentY。有关更多信息,请参见布置容器中的组件
  • 支持辅助功能

    • JComponent类提供 API 和基本功能,以帮助诸如屏幕阅读器之类的辅助技术从 Swing 组件获取信息。有关可访问性的更多信息,请参见如何支持辅助技术
  • 支持拖放

    • JComponent类提供 API 来设置组件的传输处理程序,这是 Swing 拖放支持的基础。有关详情,请参见DnD 简介
  • Double buffering

    • Double 缓冲可平滑屏幕上的绘画。有关详细信息,请参见进行定制绘画
  • Key bindings

    • 此功能使组件在用户按下键盘上的键时做出反应。例如,在许多外观上,当按钮具有焦点时,键入空格键相当于在该按钮上单击鼠标。外观会自动设置在按下和释放空格键与按钮上所产生的效果之间的绑定。有关键绑定的更多信息,请参见如何使用键绑定

JComponent API

JComponent类提供了许多新方法,并从ComponentContainer继承了许多方法。下表总结了我们最常用的方法。

自定义组件外观

MethodPurpose
void setBorder(Border)

Border getBorder()
设置或获取组件的边框。有关详情,请参见如何使用边框
void setForeground(Color)
void setBackground(Color)
设置组件的前景色或背景色。前景通常是用于在组件中绘制文本的颜色。假定组件是不透明的,背景就是组件背景区域的颜色(不足为奇)。
Color getForeground()
Color getBackground()
获取组件的前景色或背景色。
void setOpaque(boolean)
boolean isOpaque()
设置或获取组件是否不透明。不透明的组件使用其背景色填充其背景。
void setFont(Font)
Font getFont()
设置或获取组件的字体。如果尚未为组件设置字体,则返回其父级的字体。
void setCursor(Cursor)
Cursor getCursor()
设置或使光标显示在组件及其包含的所有组件上(具有自己的光标集的子代除外)。例如:aPanel.setCursor( Cursor.getPredefinedCursor( Cursor.WAIT_CURSOR));

设置和获取组件状态

MethodPurpose
void setComponentPopupMenu(JPopupMenu)为此JComponent设置JPopupMenu。 UI 负责注册绑定并添加必要的侦听器,以便在适当的时间显示JPopupMenu。显示JPopupMenu的时间取决于外观:有些可以在鼠标事件中显示,有些则可以启用键绑定。


如果popup为空,而getInheritsPopupMenu返回true,则getComponentPopupMenu将委派给父级。这提供了一种使所有子组件继承父组件的popupmenu的方法。
| void setTransferHandler(TransferHandler)
TransferHandler getTransferHandler() |设置或删除transferHandler属性。 TransferHandler支持通过剪切,复制或粘贴到剪贴板或从剪贴板粘贴以及拖放来交换数据。有关更多详细信息,请参见DnD 简介
| void setToolTipText(String) |设置要在工具提示中显示的文本。有关更多信息,请参见如何使用工具提示
| void setName(String)
String getName() |设置或获取组件的名称。当您需要将文本与不显示文本的组件关联时,这很有用。
| boolean isShowing() |确定组件是否显示在屏幕上。这意味着该组件必须是可见的,并且必须位于可见并显示的容器中。
| void setEnabled(boolean)
boolean isEnabled() |设置或获取是否启用了组件。启用的组件可以响应用户 Importing 并生成事件。
| void setVisible(boolean)
boolean isVisible() |设置或获取组件是否可见。组件最初是可见的,顶级组件除外。

MethodPurpose
void addHierarchyListener(hierarchyListener l)

void removeHierarchyListener(hierarchyListener l)
添加或除去指定的层次结构侦听器,以在此容器所属的层次结构发生更改时从此组件接收层次结构更改的事件。如果侦听器 l 为 null,则不会引发异常,也不会执行任何操作。
void addMouseListener(MouseListener)
void removeMouseListener(MouseListener)
向组件中添加mouse listener或从中删除mouse listener。当用户使用鼠标与侦听组件交互时,将通知鼠标侦听器。
void addMouseMotionListener(MouseMotionListener)
void removeMouseMotionListener(MouseMotionListener)
向组件中添加鼠标动作侦听器或从中删除鼠标动作侦听器。当用户在侦听组件的范围内移动鼠标时,将通知鼠标运动侦听器。
void addKeyListener(KeyListener)
void removeKeyListener(KeyListener)
向组件中添加key listener或从中删除key listener。当用户在键盘上键入内容并且被侦听的组件具有键盘焦点时,将通知按键侦听器。
void addComponentListener(ComponentListener)
void removeComponentListener(ComponentListener)
向组件中添加component listener或从中删除component listener。当侦听的组件被隐藏,显示,移动或调整大小时,组件侦听器会收到通知。
布尔包含(int,int)
boolean contains(Point)
确定指定的点是否在组件内。参数应根据组件的坐标系指定。两个int参数分别指定* x y *坐标。
组件 getComponentAt(int,int)
Component getComponentAt(Point)
返回包含指定的* x,y *位置的组件。如果组件重叠,则返回最上面的子组件。这是通过找到最接近索引 0 的分量确定的,该分量声称通过Component.contains()包含给定点。
组件 setComponentZOrder(component comp,int index)将指定的组件移动到容器中的指定的 zSequences 索引。
如果该组件是其他某个容器的子组件,则在将其添加到该容器之前将其从该容器中删除。此方法与java.awt.Container.add(Component, int)之间的重要区别在于,除非从基础容器窗口系统允许并从其先前的容器中删除该方法,否则该方法不会在其上一个容器中调用removeNotify。这样,如果组件具有键盘焦点,则当移动到新位置时它将保持焦点。
注意: zSequences 确定部件的绘制 Sequences。 zSequences 绘制最高的组件,zSequences 绘制最低的组件,最后。当零部件重叠时,zSequences 较低的零部件会覆盖 zSequences 较高的零部件。
组件 getComponentZOrder(component comp)返回容器内组件的 zSequences 索引。 zSequences 层次结构中的组件越高,其索引越低。在所有其他子组件之上,最后绘制具有最低 z-order 索引的组件。
MethodPurpose
void repaint()

void repaint(int,int,int,int)
请求重新涂装全部或部分零部件。四个int参数指定要绘制的矩形的边界(* x y *,宽度,高度,按此 Sequences)。
void repaint(Rectangle)请求重新绘制组件中的指定区域。
void revalidate()请求再次布置组件及其受影响的容器。除非您在可见后显式更改组件的大小/对齐提示,或在可见后更改包含层次结构,否则通常不需要调用此方法。总是在revalidate之后调用repaint
void paintComponent(Graphics)绘制组件。重写此方法以实现自定义组件的绘制。
MethodPurpose
Component add(Component)

组件 add(Component,int)
void add(组件,对象)
将指定的组件添加到此容器。此方法的一个参数版本将组件添加到容器的末尾。如果存在,则int参数指示新组件在容器中的位置。当存在时,Object参数为当前的布局 管理 器提供布局约束。
void remove(int)
void remove(Component)
void removeAll()
从此容器中删除一个或所有组件。 int自变量(如果存在)指示要删除的组件在容器中的位置。
JRootPane getRootPane()获取包含该组件的根窗格。
Container getTopLevelAncestor()获取组件的最顶层容器– WindowApplet,如果没有将组件添加到任何容器,则为 null。
Container getParent()获取组件的直接容器。
int getComponentCount()获取此容器中的组件数。
Component getComponent(int)
Component[] getComponents()
获取此容器中的一个或所有组件。 int参数指示要获取的组件的位置。
Component getComponentZOrder(int)
Component[] getComponentZOrder()
返回容器内组件的 zSequences 索引。 zSequences 层次结构中的组件越高,其索引越低。在所有其他子组件之上,最后绘制具有最低 z-order 索引的组件。
MethodPurpose
void setPreferredSize(Dimension)

void setMaximumSize(Dimension)
void setMinimumSize(Dimension)
设置组件的首选,最大或最小尺寸,以像素为单位。首选大小表示组件的最佳大小。该组件应不大于其最大大小,并且不小于其最小大小。请注意,这些只是提示,某些布局 管理 器可能会忽略它们。
Dimension getPreferredSize()
Dimension getMaximumSize()
Dimension getMinimumSize()
获取组件的首选,最大或最小尺寸,以像素为单位。许多 JComponent 类都有 setter 和 getter 方法。对于那些没有相应的 setter 方法的非JComponent子类,可以通过创建子类并覆盖这些方法来设置组件的首选大小,最大大小或最小大小。
void setAlignmentX(float)
void setAlignmentY(float)
设置沿* x- y- *轴的对齐方式。这些值指示组件希望相对于其他组件对齐的方式。该值应为 0 到 1 之间的数字,其中 0 表示沿原点对齐,1 对齐离原点最远,0.5 居中,依此类推。请注意,这些只是提示,某些布局 管理 器可能会忽略它们。
float getAlignmentX()
float getAlignmentY()
获取组件沿* x- y- *轴的对齐方式。对于没有对应的 setter 方法的非JComponent子类,可以通过创建子类并覆盖这些方法来设置组件的对齐方式。
void setLayout(LayoutManager)
LayoutManager getLayout()
设置或获取组件的布局 管理 器。布局 管理 器负责确定容器中组件的大小和位置。
void applyComponentOrientation(ComponentOrientation) void setComponentOrientation(ComponentOrientation)设置此容器及其中包含的所有组件的ComponentOrientation属性。有关更多信息,请参见设置容器的方向

获取尺寸和位置信息

MethodPurpose
int getWidth()

int getHeight()
获取以像素为单位测量的组件的当前宽度或高度。
Dimension getSize()
Dimension getSize(Dimension)
获取组件的当前大小(以像素为单位)。使用此方法的单参数版本时,调用者负责创建Dimension实例,并在其中返回结果。
int getX()
int getY()
获取相对于父级左上角的组件原点的当前* x *或 y 坐标(以像素为单位)。
Rectangle getBounds()
Rectangle getBounds(Rectangle)
获取以像素为单位的分量的边界。边界指定了组件相对于其父对象的宽度,高度和原点。使用此方法的单参数版本时,调用者负责创建Rectangle实例,并在其中返回结果。
Point getLocation()
Point getLocation(Point)
获取相对于父级左上角的组件的当前位置(以像素为单位)。当使用getLocation方法的单参数版本时,调用方负责创建Point实例,并在其中返回结果。
Point getLocationOnScreen()返回相对于屏幕左上角的位置。
Insets getInsets()获取组件边框的大小。
MethodPurpose
void setLocation(int,int)

void setLocation(Point)
设置相对于父级左上角的组件位置(以像素为单位)。两个int参数按此 Sequences 指定* x y *。当您不使用布局 管理 器时,请使用这些方法来定位组件。
void setSize(int,int)
void setSize(Dimension)
设置以像素为单位的组件的大小。两个int参数按此 Sequences 指定宽度和高度。不使用布局 管理 器时,请使用这些方法来调整组件的大小。
void setBounds(int,int,int,int)
void setBounds(Rectangle)
设置相对于父级组件左上角的大小和位置(以像素为单位)。四个int参数按该 Sequences 指定* x y *,宽度和高度。当您不使用布局 管理 器时,使用这些方法来定位和调整组件的大小。