Java 中文官方教程 2022 版(十四)(2)https://developer.aliyun.com/article/1486374
步骤 5:添加第二个 JLabel
添加第二个 JLabel
最后,添加第二个JLabel
,重复第 2 步中的过程。将这第二个标签放置在JButton
的右侧,如上所示。
调整 CelsiusConverter GUI
原文:
docs.oracle.com/javase/tutorial/uiswing/learn/adjustinggui.html
现在,GUI 组件已经就位,是时候进行最后的调整了。有几种不同的方法可以做到这一点;这里建议的顺序只是一种可能的方法。
步骤 1:设置组件文本
首先,双击JTextField
和JButton
以更改 IDE 插入的默认文本。当你从JTextField
中擦除文本时,它会如下所示地缩小。将JButton
的文本从“JButton1”更改为“Convert”。还将顶部JLabel
的文本更改为“Celsius”,底部更改为“Fahrenheit”。
设置组件文本
步骤 2:设置组件大小
接下来,按住JTextField
和JButton
组件并进行 shift 点击。这将突出显示它们各自被选中。右键点击(Mac 用户为 control 点击)选择“相同大小” -> “相同宽度”。现在,这些组件的宽度将相同,如下所示。在执行此步骤时,请确保JFrame
本身没有被选中。如果选中了,相同大小菜单将不可用。
设置 JTextField 和 JButton 大小
步骤 3:移除额外空间
最后,拖动JFrame
的右下角并调整其大小以消除任何额外的空白。请注意,如果消除了所有额外的空间(如下所示),标题(仅在运行时显示)可能不会完全显示。最终用户可以根据需要调整应用程序的大小,但你可能希望在右侧留一些额外的空间,以确保一切都正确地适合。尝试一下,并使用完成 GUI 的截图作为指南。
完成的 GUI
此应用程序的 GUI 部分现在已经完成!如果 NetBeans IDE 完成了它的工作,你应该觉得创建这个 GUI 是一个简单的,甚至是微不足道的任务。但是花点时间点击源选项卡;你可能会对生成的代码量感到惊讶。
*此图已经缩小以适应页面。
点击图像以查看其自然大小。*
要查看完整的代码,请根据需要在 IDE 中上下滚动。你可以通过点击源编辑器左侧的 + 或 - 符号来展开或折叠某些代码块(如方法体)。
添加应用程序逻辑
现在是时候添加应用程序逻辑了。
步骤 1:更改默认变量名称
下图显示了当前在检查器中显示的默认变量名称。对于每个组件,变量名称首先出现,然后是方括号中的对象类型。例如,jTextField1 [JTextField]
表示“jTextField1”是变量名称,“JTextField”是其类型。
默认变量名称
在此应用程序的上下文中,默认名称并不是非常相关,因此将它们从默认值更改为更有意义的内容是有意义的。右键单击每个变量名称,选择“更改变量名称”。完成后,变量名称应如下所示:
新的变量名称
新的变量名称是“tempTextField”、“celsiusLabel”、“convertButton”和“fahrenheitLabel”。您在检查器中进行的每个更改都将自动传播回源代码中。您可以放心,编译不会因手动编辑时常见的拼写错误或类似错误而失败。
步骤 2:注册事件监听器
当最终用户与 Swing GUI 组件交互(例如单击“Convert”按钮)时,该组件将生成一种特殊类型的对象 —— 称为事件对象 —— 然后将其广播到先前注册为该事件的监听器的任何其他对象。NetBeans IDE 使事件监听器注册变得非常简单:
*此图已经缩小以适应页面。
单击图像以查看其自然大小。*
在设计区域中,单击“Convert”按钮以选择它。确保只有“Convert”按钮被选中(如果 JFrame 本身也被选中,则此步骤将无效)。右键单击“Convert”按钮,选择事件 -> 动作 -> actionPerformed。这将生成所需的事件处理代码,使您可以在其中添加自己的功能的空方法体:
*此图已经缩小以适应页面。
单击图像以查看其自然大小。*
有许多不同类型的事件,代表着用户可以执行的各种操作(点击鼠标会触发一种类型的事件,键盘输入会触发另一种,移动鼠标则会触发另一种,依此类推)。我们的应用程序只关注ActionEvent;有关事件处理的更多信息,请参阅编写事件监听器。
步骤 3:添加温度转换代码
最后一步只需将温度转换代码粘贴到空方法体中。以下代码是将温度从摄氏度转换为华氏度所需的全部内容:
注意:
此示例不可本地化,因为parseDouble
方法不可本地化。此代码片段仅用于说明目的。更健壮的实现将使用Scanner类来解析用户输入。
//Parse degrees Celsius as a double and convert to Fahrenheit. int tempFahr = (int)((Double.parseDouble(tempTextField.getText())) * 1.8 + 32); fahrenheitLabel.setText(tempFahr + " Fahrenheit");
只需复制此代码并将其粘贴到下面所示的convertButtonActionPerformed
方法中:
*此图已经缩小以适应页面。
点击图像以查看其自然大小。*
完成温度转换代码后,应用程序现在已经完成。
步骤 4:运行应用程序
运行应用程序只是在 NetBeans IDE 中选择运行 -> 运行主项目的简单事情。第一次运行此应用程序时,会提示您设置CelsiusConverterGUI
为此项目的主类。点击“确定”按钮,当程序编译完成后,您应该会看到应用程序在自己的窗口中运行。
恭喜!您已经完成了您的第一个 Swing 应用程序!
问题和练习:使用 NetBeans IDE 学习 Swing
原文:
docs.oracle.com/javase/tutorial/uiswing/QandE/questions-learn.html
问题
- 在创建这个新项目时,我们取消了“创建主类”复选框的选择。为什么?
- _____ 包含了 Swing API 提供的所有组件。
- 设计区域的目的是什么?
- 解释源代码和设计标签之间的区别。
- 列举一些使用属性编辑器编辑对象的优势(与直接在源代码中编辑相比)。
- 这节课使用了三种不同类型的 Swing 对象。它们是什么?
- 描述在设计区域中设置两个组件宽度相同的过程。
练习
- 使用属性编辑器来改变这个应用程序的外观。尝试改变一些数值,看看你的改变有什么效果。
检查你的答案
教程:使用 Swing 组件
原文:
docs.oracle.com/javase/tutorial/uiswing/components/index.html
示例索引
本课程为您提供了使用 Swing 组件所需的背景信息,然后描述了每个 Swing 组件。它假定您已成功编译和运行了使用 Swing 组件的程序,并且熟悉基本的 Swing 概念。这些先决条件在开始使用 Swing 和使用 NetBeans IDE 学习 Swing 中有所涵盖。
使用顶层容器
讨论了如何使用JFrame
、JDialog
和JApplet
类共享的功能——内容窗格、菜单栏和根窗格。还讨论了包含层次结构,指的是顶层容器包含的组件树。
JComponent 类
告诉你JComponent
为其子类(几乎所有 Swing 组件)提供的功能,并提供如何利用这些功能的提示。本节以 API 表结束,描述了JComponent
及其超类Container
和Component
定义的常用 API。
使用文本组件
描述了所有从JTextComponent
继承的组件共享的功能和 API。如果您只是使用文本字段(格式化或非格式化)或文本区域,您可能不需要阅读本节。
如何…
按字母顺序列出如何使用每个 Swing 组件的部分。我们不希望您按顺序阅读这些部分。相反,我们建议在准备开始在自己的程序中使用 Swing 组件时阅读相关的“如何”部分。例如,如果您的程序需要一个框架、一个标签、一个按钮和一个颜色选择器,您应该阅读如何制作框架、如何使用标签、如何使用按钮和如何使用颜色选择器。
在 Swing 组件中使用 HTML
描述了如何通过使用 HTML 标签来改变 Swing 组件显示的文本的字体、颜色或其他格式。
使用模型
告诉您关于 Swing 模型架构。这种 Model-View-Controller(MVC)的变体意味着您可以(如果愿意)指定 Swing 组件的数据和状态如何存储和检索。其好处是能够在组件之间共享数据和状态,并大大提高显示大量数据的表格等组件的性能。
使用边框
边框非常方便,用于在组件的边缘周围绘制线条、标题和空白空间。(您可能已经注意到,本教程中的示例使用了许多边框。)本节告诉您如何向任何JComponent
添加边框。
使用图标
许多 Swing 组件可以显示图标。通常,图标是作为ImageIcon
类的实例实现的。
解决常见组件问题
本节讨论了常见组件相关问题的解决方案。
如果你对使用 JavaFX 创建 GUI 感兴趣,请参阅使用 JavaFX 图表和使用 JavaFX UI 控件。
使用顶级容器
原文:
docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html
正如我们之前提到的,Swing 提供了三个通常有用的顶级容器类:JFrame
、JDialog
和JApplet
。在使用这些类时,您应该记住以下事实:
- 要在屏幕上显示,每个 GUI 组件必须是包含层次结构的一部分。包含层次结构是一个组件树,其根是一个顶级容器。我们稍后会展示给你。
- 每个 GUI 组件只能被包含一次。如果一个组件已经在一个容器中,并且您尝试将其添加到另一个容器中,该组件将从第一个容器中移除,然后添加到第二个容器中。
- 每个顶级容器都有一个内容窗格,一般来说,内容窗格包含(直接或间接地)该顶级容器 GUI 中可见的组件。
- 您可以选择向顶级容器添加一个菜单栏。按照惯例,菜单栏位于顶级容器内部,但在内容窗格之外。一些外观和感觉,如 Mac OS 外观和感觉,可以让您选择将菜单栏放在更适合外观和感觉的其他位置,例如屏幕顶部。
**注意:**虽然JInternalFrame
模仿JFrame
,但内部框架实际上不是顶级容器。
这是一个应用程序创建的框架的图片。框架包含一个绿色的菜单栏(没有菜单),在框架的内容窗格中有一个大的空白黄色标签。
您可以在TopLevelDemo.java
中找到此示例的完整源代码。虽然示例在独立应用程序中使用了JFrame
,但相同的概念也适用于JApplet
和JDialog
。
这是此示例 GUI 的包含层次结构:
如椭圆形所示,我们在这个图表中略去了一些细节。我们稍后会透露这些缺失的细节。这部分讨论以下主题:
- 顶级容器和包含层次结构
- 向内容窗格添加组件
- 添加菜单栏
- 根窗格(又名缺失的细节)
顶级容器和包含层次结构
使用 Swing 组件的每个程序至少有一个顶级容器。这个顶级容器是包含层次结构的根 - 包含所有出现在顶级容器内部的 Swing 组件的层次结构。
通常情况下,具有基于 Swing 的 GUI 的独立应用程序至少有一个以 JFrame
为根的包含层次结构。例如,如果一个应用程序有一个主窗口和两个对话框,则该应用程序有三个包含层次结构,因此有三个顶级容器。一个包含层次结构以 JFrame
为根,另外两个分别以 JDialog
对象为根。
一个基于 Swing 的小程序至少有一个包含层次结构,其中有一个由 JApplet
对象作为根。例如,弹出对话框的小程序有两个包含层次结构。浏览器窗口中的组件位于由 JApplet
对象作为根的包含层次结构中。对话框有一个由 JDialog
对象作为根的包含层次结构。
向内容窗格添加组件
以下是前面示例中使用的代码,用于获取框架的内容窗格并将黄色标签添加到其中:
frame.getContentPane().add(yellowLabel, BorderLayout.CENTER);
如代码所示,您可以通过调用 getContentPane
方法找到顶级容器的内容窗格。默认内容窗格是一个简单的中间容器,继承自 JComponent
,并使用 BorderLayout
作为其布局管理器。
定制内容窗格很容易—例如设置布局管理器或添加边框。但是,有一个小问题。getContentPane
方法返回的是一个 Container
对象,而不是 JComponent
对象。这意味着如果您想利用内容窗格的 JComponent
功能,您需要要么对返回值进行类型转换,要么创建自己的组件作为内容窗格。我们的示例通常采用第二种方法,因为这样更清晰。我们有时采用的另一种方法是简单地向内容窗格添加一个定制组件,完全覆盖内容窗格。
请注意,JPanel
的默认布局管理器是 FlowLayout
;您可能需要更改它。
要将组件设置为内容窗格,请使用顶级容器的 setContentPane
方法。例如:
//Create a panel and add components to it. JPanel contentPane = new JPanel(new BorderLayout()); contentPane.setBorder(*someBorder*); contentPane.add(*someComponent*, BorderLayout.CENTER); contentPane.add(*anotherComponent*, BorderLayout.PAGE_END); *topLevelContainer*.setContentPane(contentPane);
注意:
为方便起见,add
方法及其变体,remove
和 setLayout
已被重写以根据需要转发到 contentPane
。这意味着您可以编写
frame.add(child);
并且子组件将被添加到 contentPane
。
请注意,只有这三种方法可以实现这一点。这意味着 getLayout()
不会返回使用 setLayout()
设置的布局。
添加菜单栏
理论上,所有顶级容器都可以容纳菜单栏。然而,在实践中,菜单栏通常只出现在框架和小程序中。要向顶级容器添加菜单栏,请创建一个 JMenuBar
对象,填充它的菜单,然后调用 setJMenuBar
。TopLevelDemo
使用以下代码向其框架添加菜单栏:
frame.setJMenuBar(greenMenuBar);
欲了解更多关于实现菜单和菜单栏的信息,请参阅如何使用菜单。
根窗格
每个顶层容器依赖于一个名为根窗格的隐秘中间容器。根窗格管理内容窗格和菜单栏,以及其他几个容器。通常情况下,你不需要了解根窗格来使用 Swing 组件。然而,如果你需要拦截鼠标点击或在多个组件上绘制,你应该熟悉根窗格。
这里是根窗格为框架(以及每个其他顶层容器)提供的组件列表:
我们已经告诉过你关于内容窗格和可选菜单栏。根窗格添加的另外两个组件是分层窗格和玻璃窗格。分层窗格包含菜单栏和内容窗格,并且可以对其他组件进行 Z 轴排序。玻璃窗格通常用于拦截发生在顶层容器上的输入事件,并且还可以用于在多个组件上绘制。
更多详情,请参见如何使用根窗格。
JComponent 类
原文:
docs.oracle.com/javase/tutorial/uiswing/components/jcomponent.html
除了顶级容器之外,所有以"J"开头命名的 Swing 组件都是从JComponent
类继承的。例如,JPanel
、JScrollPane
、JButton
和JTable
都继承自JComponent
。但是,JFrame
和JDialog
不是因为它们实现了顶级容器。
JComponent
类扩展了Container
类,而Container
类本身又扩展了Component
类。Component
类包括从提供布局提示到支持绘制和事件的所有内容。Container
类支持向容器添加组件和对它们进行布局。本节的 API 表格总结了Component
、Container
和JComponent
最常用的方法。
JComponent 特性
JComponent
类为其子类提供以下功能:
- 工具提示
- 绘制和边框
- 应用程序范围内可插拔的外观和感觉
- 自定义属性
- 布局支持
- 支持辅助功能
- 拖放支持
- 双缓冲
- 键绑定
工具提示
通过使用setToolTipText
方法指定一个字符串,您可以为组件的用户提供帮助。当光标停留在组件上时,指定的字符串将显示在靠近组件的小窗口中。更多信息请参见如何使用工具提示。
绘制和边框
setBorder
方法允许您指定组件显示在边缘周围的边框。要绘制组件的内部,请重写paintComponent
方法。有关详细信息,请参见如何使用边框和执行自定义绘制。
应用程序范围内可插拔的外观和感觉
在幕后,每个JComponent
对象都有一个对应的ComponentUI
对象,负责执行所有绘图、事件处理、大小确定等工作。使用哪个ComponentUI
对象取决于当前的外观和感觉,您可以使用UIManager.setLookAndFeel
方法进行设置。详细信息请参见如何设置外观和感觉。
自定义属性
您可以将一个或多个属性(名称/对象对)与任何JComponent
关联。例如,布局管理器可以使用属性将约束对象与其管理的每个JComponent
关联起来。您可以使用putClientProperty
和getClientProperty
方法来放置和获取属性。有关属性的一般信息,请参阅属性。
布局支持
虽然Component
类提供了布局提示方法,如getPreferredSize
和getAlignmentX
,但除了创建子类并覆盖这些方法之外,它并没有提供任何设置这些布局提示的方法。为了提供另一种设置布局提示的方法,JComponent
类添加了设置器方法 - setMinimumSize
、setMaximumSize
、setAlignmentX
和setAlignmentY
。详情请参阅在容器中布局组件。
辅助功能支持
JComponent
类提供了 API 和基本功能,以帮助辅助技术(如屏幕阅读器)从 Swing 组件中获取信息。有关辅助功能的更多信息,请参阅如何支持辅助技术。
拖放支持
JComponent
类提供了 API 来设置组件的传输处理程序,这是 Swing 拖放支持的基础。详情请参阅拖放简介。
双缓冲
双缓冲平滑屏幕绘制。详情请参阅执行自定义绘制。
按键绑定
此功能使组件在用户按下键盘上的键时做出反应。例如,在许多外观中,当按钮获得焦点时,按下空格键等同于鼠标单击按钮。外观会自动设置按下和释放空格键之间的绑定以及按钮上的结果效果。有关按键绑定的更多信息,请参阅如何使用按键绑定。
JComponent API
JComponent
类提供了许多新方法,并继承了许多方法从Component
和Container
。以下表格总结了我们最常使用的方法。
- 自定义组件外观
- 设置和获取组件状态
- 处理事件
- 绘制组件
- 处理包含关系
- 组件布局
- 获取大小和位置信息
- 指定绝对大小和位置
自定义组件外观
方法 | 目的 |
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) | 为这个JComponent
设置JPopupMenu
。UI 负责注册绑定并添加必要的监听器,以便在适当的时候显示JPopupMenu
。JPopupMenu
何时显示取决于外观和感觉:有些可能在鼠标事件上显示它,有些可能启用键绑定。
如果popup
为 null,并且getInheritsPopupMenu
返回true
,那么getComponentPopupMenu
将被委托给父组件。这提供了一种让所有子组件继承父组件的popupmenu
的方法。
void setTransferHandler(TransferHandler) TransferHandler getTransferHandler() | 设置或移除transferHandler 属性。TransferHandler 支持通过剪切、复制或粘贴到/从剪贴板以及拖放来交换数据。有关更多详细信息,请参阅拖放简介。 |
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)
| 设置组件 Z 轴顺序(component comp, int index) | 将指定的组件移动到容器中指定的 Z 轴顺序索引位置。
如果组件是其他容器的子组件,则在添加到此容器之前,它将从该容器中移除。此方法与java.awt.Container.add(Component, int)
之间的重要区别在于,此方法在将组件从其先前的容器中移除时,除非必要且允许底层本机窗口系统,否则不会调用组件的removeNotify
。这样,如果组件具有键盘焦点,则在移动到新位置时会保持焦点。
注意: Z 轴顺序决定了组件绘制的顺序。具有最高 Z 轴顺序的组件首先绘制,具有最低 Z 轴顺序的组件最后绘制。在组件重叠的情况下,具有较低 Z 轴顺序的组件会覆盖具有较高 Z 轴顺序的组件。 |
获取组件 Z 轴顺序(component comp) | 返回容器内组件的 Z 轴顺序索引。组件在 Z 轴顺序层次结构中越高,其索引越低。具有最低 Z 轴顺序索引的组件最后绘制,位于所有其他子组件之上。 |
绘画组件
(详见执行自定义绘画)
方法 | 目的 |
void 重绘() void 重绘(int, int, int, int) | 请求重绘组件的全部或部分。四个int 参数指定要绘制的矩形的边界(x、y、宽度、高度,按顺序)。 |
void 重绘(Rectangle) | 请求重绘组件内指定区域。 |
void 重新验证() | 请求重新布局组件及其受影响的容器。通常情况下,除非在组件可见后显式更改组件的大小/对齐提示或在其可见后更改包含层次结构,否则不应调用此方法。在revalidate 后始终调用repaint 。 |
void 绘制组件(Graphics) | 绘制组件。重写此方法以实现自定义组件的绘制。 |
处理包含层次结构
(查看使用顶层容器获取更多信息)
方法 | 目的 |
| 添加组件(Component) 添加组件(Component, int)
void 添加(Component, Object) | 将指定组件添加到此容器。此方法的单参数版本将组件添加到容器的末尾。当存在时,int
参数指示新组件在容器中的位置。当存在时,Object
参数为当前布局管理器提供布局约束。 |
| void 移除(int) void 移除(Component)
void 移除全部() | 从此容器中移除一个或全部组件。当存在时,int
参数指示要移除的组件在容器中的位置。 |
获取根窗格() | 获取包含组件的根窗格。 |
获取顶层祖先容器 | 获取组件的最顶层容器 — 一个Window 、Applet ,或者如果组件尚未添加到任何容器中则为 null。 |
获取父容器() | 获取组件的直接容器。 |
获取组件数量() | 获取此容器中的组件数量。 |
获取组件(int) 获取组件(Component[]) | 获取此容器中的一个或所有组件。int 参数表示要获取的组件的位置。 |
获取组件 Z 顺序索引(int) 获取组件 Z 顺序索引(Component[]) | 返回容器内组件的 Z 顺序索引。组件在 Z 顺序层次结构中越高,其索引越低。具有最低 Z 顺序索引的组件最后绘制,位于所有其他子组件之上。 |
组件布局
(查看在容器内布局组件获取更多信息)
方法 | 目的 |
| 设置首选大小(Dimension) 设置最大大小(Dimension)
设置最小尺寸(Dimension) | 设置组件的首选、最大或最小尺寸,以像素为单位。首选尺寸表示组件的最佳尺寸。组件的大小不应大于其最大尺寸,也不应小于其最小尺寸。请注意,这些仅是提示,可能会被某些布局管理器忽略。 |
| 获取首选大小(Dimension) 获取最大大小(Dimension)
获取最小尺寸(Dimension) | 获取组件的首选、最大或最小尺寸,以像素为单位。许多 JComponent 类都有设置器和获取器方法。对于那些没有相应设置器方法的非JComponent
子类,可以通过创建子类并覆盖这些方法来设置组件的首选、最大或最小尺寸。 |
void setAlignmentX(float) void setAlignmentY(float) | 设置组件沿着*x-或y-*轴的对齐方式。这些值表示组件希望相对于其他组件对齐的方式。该值应为介于 0 和 1 之间的数字,其中 0 表示沿着原点对齐,1 表示与原点最远对齐,0.5 表示居中,依此类推。请注意,这仅仅是提示,某些布局管理器可能会忽略这些值。 |
float getAlignmentX() float getAlignmentY() | 获取组件沿着*x-或y-*轴的对齐方式。对于非JComponent 子类,没有相应的设置方法,您可以通过创建子类并重写这些方法来设置组件的对齐方式。 |
void 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 参数按顺序指定x和y。在不使用布局管理器时,使用这些方法来定位组件。 |
void setSize(int, int) void setSize(Dimension) | 设置以像素为单位的组件大小。两个int 参数按顺序指定宽度和高度。在不使用布局管理器时,使用这些方法来调整组件大小。 |
void setBounds(int, int, int, int) void setBounds(Rectangle) | 设置组件相对于父组件左上角的大小和位置(以像素为单位)。四个int 参数按顺序指定x、y、宽度和高度。在不使用布局管理器时,使用这些方法来定位和调整组件的大小。 |
Java 中文官方教程 2022 版(十四)(4)https://developer.aliyun.com/article/1486382