java - 如何访问添加到尚未声明的 JPanel 的 swing 组件?
问题描述
如果我将一个组件(比如一个 JLabel)添加到 JPanel 而不声明它,有没有办法在 JLabel 实例化后访问它?我正在尝试设置组件的对齐方式,但即使通过 getComponent() 也无法访问 setAlignmentX() 方法。
testPanel.add(new JLabel("test label"));
testPanel.getComponent(0).setAlignmentX(Component.CENTER_ALIGNMENT);
我试过 getComponent() 但 setAlignmentX() 方法无法解析,这让我相信 getComponent() 方法没有正确返回 JLabel,可能是因为我从未正式声明过它。我没有向 JPanel 添加任何其他组件。我知道我总是可以在将 JLabel 添加到 JPanel 之前声明它,但我宁愿只添加new JLabel("test label")
而不是在添加之前声明一个。
解决方案
JLabel
正如您提到的那样,宣布第一个可能被认为是最佳实践,但要回答您的问题......
该方法getComponent(int)
返回 a java.awt.Component
,而不是JComponent
(nor JLabel
)。Component
没有这样的方法setAlignmentX
(它只有一个吸气剂)。
假设您确定要获得的组件是 a JLabel
,则必须强制转换它:
((JLabel)testPanel.getComponent(0)).setAlignmentX(Component.CENTER_ALIGNMENT);
您可能会发现,将这种必要的演员阵容普遍化比仅仅声明第一个演员更难维护JLabel
。
推荐阅读
- database - 如何恢复 Pervasive Db 备份?
- c# - 如何在全选的文本框中写入多个键符号?
- python - while循环的文本表达式在python中不起作用
- javascript - 如何在对象上设置 useState 数据
- javascript - 当它们达到 60 时,我怎样才能将秒数重置为 0
- css - html body 元素的最小高度
- embedded-linux - 无法升级 Yocto Krogoth 中元层的配方
- r - 我已经编写了一个函数,并试图通过 lapply 将其传递给数据框中的每一行
- active-directory - 有没有办法在 DistinguishedName 中排序
- c# - asp.net 核心通过 ENV 变量覆盖连接字符串