java - 如何访问添加到尚未声明的 JPanel 的 swing 组件?

标签 java 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") 而不是在添加它之前声明它。 p>

最佳答案

正如您所提到的,首先声明 JLabel 可能被认为是最佳实践,但要回答您的问题......

方法 getComponent(int) 返回一个 java.awt.Component,而不是 JComponent(也不是 JLabel) >)。 Component 没有这样的方法 setAlignmentX (它只有一个 getter)。

假设您确定获得的组件是 JLabel,则必须对其进行强制转换:

((JLabel)testPanel.getComponent(0)).setAlignmentX(Component.CENTER_ALIGNMENT);

您可能会发现,与仅先声明 JLabel 相比,在所有地方普遍化这种必要的转换会更难以维护。

关于java - 如何访问添加到尚未声明的 JPanel 的 swing 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58173586/

相关文章:

java - 当我按下按钮时,它总是复制 jTable 上的现有记录

java - 我们可以在 web.xml URL 模式中使用正则表达式吗?

java - 如何通过JPA向具有复合主键的表中插入数据?

java - 仅使用行中包含的值获取 JTable 中的行索引?

java - java图形的多线程

java - 在多个java线程之间共享数据并获取更新值

java - HashMap 不可序列化

java - 将 JButton 放在右下角

java - 带有垂直滚动条的 GridBagLayout

java - JTable 搜索和删除行