Java 如何访问添加到尚未声明的JPanel的swing组件?
如果我在没有声明的情况下向JPanel添加组件(比如JLabel),有没有一种方法可以在实例化后访问JLabel?我正在尝试设置组件的对齐方式,但即使通过getComponent()也无法访问setAlignmentX()方法Java 如何访问添加到尚未声明的JPanel的swing组件?,java,swing,Java,Swing,如果我在没有声明的情况下向JPanel添加组件(比如JLabel),有没有一种方法可以在实例化后访问JLabel?我正在尝试设置组件的对齐方式,但即使通过getComponent()也无法访问setAlignmentX()方法 我尝试过getComponent(),但无法解析setAlignmentX()方法,这让我相信getComponent()方法没有正确返回JLabel,可能是因为我从未正式声明过它。我没有向JPanel添加任何其他组件。我知道我可以在添加到JPanel之前声明JLabel
我尝试过getComponent(),但无法解析setAlignmentX()方法,这让我相信getComponent()方法没有正确返回JLabel,可能是因为我从未正式声明过它。我没有向JPanel添加任何其他组件。我知道我可以在添加到JPanel之前声明JLabel,但我宁愿添加
新的JLabel(“测试标签”)
,而不是在添加之前声明一个。如您所述,首先声明JLabel可能被认为是最佳实践,但要回答您的问题
方法getComponent(int)
返回一个java.awt.Component
,而不是JComponent
(也不是JLabel
)Component
没有这样的方法setAlignmentX
(它只有一个getter)
假设您确定得到的组件是JLabel
,则必须强制转换它:
((JLabel)testPanel.getComponent(0)).setAlignmentX(Component.CENTER_ALIGNMENT);
您可能会发现,与首先声明JLabel
相比,在任何地方普及这种必要的强制转换都不太容易维护。您知道在该位置/索引处总是JLabel
吗?我同意@zron。我还要声明JLabel。如果你想有更可读的代码(并且要添加多个JLabel),可以创建一个addAlignedJLabel(String title)方法,该方法执行声明、对齐和添加到面板中。关于强制转换,我完全忽略了它将返回一个组件而不是JLabel这一事实。为了可读性,我可能会选择addAlignedJLabel路线。
((JLabel)testPanel.getComponent(0)).setAlignmentX(Component.CENTER_ALIGNMENT);