文档

Java™ 教程
隐藏目录
JComponent类
路径: 使用Swing创建GUI
课程: 使用Swing组件

JComponent类

除顶级容器外,所有以“J”开头的Swing组件都是从JComponent类继承的。例如,JPanel、JScrollPane、JButton和JTable都继承自JComponent。但是,JFrame和JDialog不继承自JComponent,因为它们实现了顶级容器。

JComponent类继承自Container类,而Container类本身继承自Component类。Component类包括了提供布局提示和支持绘制和事件的所有内容。Container类支持向容器添加组件和布局。本节的API表总结了Component、Container和JComponent的最常用方法。API表

JComponent功能

JComponent类为其子类提供以下功能:

工具提示
通过使用setToolTipText方法指定一个字符串,您可以为组件的用户提供帮助。当光标停留在组件上时,指定的字符串将显示在靠近组件的一个小窗口中。有关更多信息,请参阅如何使用工具提示
绘制和边框
setBorder方法允许您指定组件显示在其边缘周围的边框。要绘制组件的内部,可以重写paintComponent方法。有关详细信息,请参阅如何使用边框执行自定义绘制
应用程序级可插拔外观
在后台,每个JComponent对象都有一个对应的ComponentUI对象,用于执行该JComponent的所有绘制、事件处理、大小确定等操作。使用哪个ComponentUI对象取决于当前的外观和感觉,可以使用UIManager.setLookAndFeel方法设置。有关详细信息,请参阅如何设置外观和感觉
自定义属性
您可以将一个或多个属性(名称/对象对)与任何JComponent相关联。例如,布局管理器可以使用属性将约束对象与其管理的每个JComponent关联起来。您可以使用putClientPropertygetClientProperty方法来设置和获取属性。有关属性的一般信息,请参阅属性
布局支持
尽管Component类提供了一些布局提示方法,如getPreferredSizegetAlignmentX,但它没有提供任何设置这些布局提示的方法,除非创建一个子类并重写这些方法。为了给您另一种设置布局提示的方式,JComponent类添加了setter方法 - setMinimumSize, setMaximumSize, setAlignmentXsetAlignmentY。有关更多信息,请参阅在容器内布置组件
辅助功能支持
JComponent类提供API和基本功能,以帮助辅助技术(如屏幕阅读器)从Swing组件获取信息。有关辅助功能的更多信息,请参阅如何支持辅助技术
支持拖放
JComponent类提供了设置组件传输处理程序的API,这是Swing拖放支持的基础。详情请参见拖放入门
双缓冲
双缓冲平滑了屏幕上的绘图。详情请参见执行自定义绘图
键绑定
此功能使组件在用户按下键盘上的键时做出反应。例如,在许多外观中,当按钮具有焦点时,键入空格键相当于在按钮上单击鼠标。外观自动设置了按下和释放空格键与按钮上的相应效果之间的绑定。有关键绑定的更多信息,请参见如何使用键绑定

JComponent API

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

自定义组件外观
方法 目的
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));
设置和获取组件状态void setComponentPopupMenu(JPopupMenu)JComponentJPopupMenuJPopupMenuJPopupMenu

popupgetInheritsPopupMenutruegetComponentPopupMenupopupmenuvoid setTransferHandler(TransferHandler)
TransferHandler getTransferHandler()transferHandlerTransferHandlerDnD简介void setToolTipText(String)如何使用工具提示void setName(String)
String getName()boolean isShowing()void setEnabled(boolean)
boolean isEnabled()void setVisible(boolean)
boolean isVisible()
处理事件
(详见
编写事件监听器void addHierarchyListener(hierarchyListener l)
void removeHierarchyListener(hierarchyListener l)
void addMouseListener(MouseListener)
void removeMouseListener(MouseListener)void addMouseMotionListener(MouseMotionListener)
void removeMouseMotionListener(MouseMotionListener)void addKeyListener(KeyListener)
void removeKeyListener(KeyListener)void addComponentListener(ComponentListener)
void removeComponentListener(ComponentListener)boolean contains(int, int)
boolean contains(Point)intxyComponent getComponentAt(int, int)
Component getComponentAt(Point)x, yComponent.contains()Component setComponentZOrder(component comp, int index)


java.awt.Container.add(Component, int)removeNotify

注意:
Component getComponentZOrder(component comp)
绘制组件
(详见
自定义绘制 )
方法 目的
void repaint()
void repaint(int, int, int, int)
请求重绘组件的全部或部分区域。四个int参数指定要绘制的矩形的边界(按照xy、宽度、高度的顺序)。
void repaint(Rectangle) 请求重绘组件内指定的区域。
void revalidate() 请求重新布局组件及其受影响的容器。一般情况下不需要调用此方法,除非在组件可见后显式更改组件的大小/对齐提示或在容器层次结构可见后更改容器层次结构。在调用revalidate后始终调用repaint
void paintComponent(Graphics) 绘制组件。重写此方法以实现自定义组件的绘制。
处理容器层次结构
(请参阅
使用顶级容器Component add(Component)
Component add(Component, int)
void add(Component, Object)void remove(int)
void remove(Component)
void removeAll()JRootPane getRootPane()Container getTopLevelAncestor()Container getParent()int getComponentCount()Component getComponent(int)
Component[] getComponents()Component getComponentZOrder(int)
Component[] getComponentZOrder()
组件布局
(更多信息请参见
在容器内布局组件void setPreferredSize(Dimension)
void setMaximumSize(Dimension)
void setMinimumSize(Dimension)Dimension getPreferredSize()
Dimension getMaximumSize()
Dimension getMinimumSize()JComponentvoid setAlignmentX(float)
void setAlignmentY(float)x-y-float getAlignmentX()
float getAlignmentY()x-y-JComponentvoid setLayout(LayoutManager)
LayoutManager getLayout()void applyComponentOrientation(ComponentOrientation)void setComponentOrientation(ComponentOrientation)ComponentOrientation设置容器的方向
获取大小和位置信息
方法 目的
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() 获取组件的边框大小。
指定绝对大小和位置
(更多信息请参见
不使用布局管理器(绝对定位))
方法 目的
void setLocation(int, int)
void setLocation(Point)
设置组件相对于父组件左上角的像素位置。两个 int 参数按顺序指定 xy。当您不使用布局管理器时,使用这些方法来定位组件。
void setSize(int, int)
void setSize(Dimension)
设置组件的像素大小。两个 int 参数按顺序指定宽度和高度。当您不使用布局管理器时,使用这些方法来设置组件的大小。
void setBounds(int, int, int, int)
void setBounds(Rectangle)
设置组件相对于父组件左上角的像素大小和位置。四个 int 参数按顺序指定 xy、宽度和高度。当您不使用布局管理器时,使用这些方法来定位和设置组件的大小。

上一页: 使用顶级容器
下一页: 使用文本组件