如果我将一个组件(例如 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/