首页 > 解决方案 > 如何访问添加到尚未声明的 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")而不是在添加之前声明一个。

标签: javaswing

解决方案


JLabel正如您提到的那样,宣布第一个可能被认为是最佳实践,但要回答您的问题......

该方法getComponent(int)返回 a java.awt.Component,而不是JComponent(nor JLabel)。Component没有这样的方法setAlignmentX(它只有一个吸气剂)。

假设您确定要获得的组件是 a JLabel,则必须强制转换它:

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

您可能会发现,将这种必要的演员阵容普遍化比仅仅声明第一个演员更难维护JLabel


推荐阅读