Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何访问添加到尚未声明的JPanel的swing组件?_Java_Swing - Fatal编程技术网

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

Java 如何访问添加到尚未声明的JPanel的swing组件?,java,swing,Java,Swing,如果我在没有声明的情况下向JPanel添加组件(比如JLabel),有没有一种方法可以在实例化后访问JLabel?我正在尝试设置组件的对齐方式,但即使通过getComponent()也无法访问setAlignmentX()方法 我尝试过getComponent(),但无法解析setAlignmentX()方法,这让我相信getComponent()方法没有正确返回JLabel,可能是因为我从未正式声明过它。我没有向JPanel添加任何其他组件。我知道我可以在添加到JPanel之前声明JLabel

如果我在没有声明的情况下向JPanel添加组件(比如JLabel),有没有一种方法可以在实例化后访问JLabel?我正在尝试设置组件的对齐方式,但即使通过getComponent()也无法访问setAlignmentX()方法


我尝试过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);