好吧,这可能看起来像是一个奇怪的问题,但是有没有一种方法可以在调用类似
jPanel3.getComponent(0).getName();
如果我正确理解了这个问题,你想要这样的东西:
Component c=jPanel3.getComponent(0);
if (c instanceof JLabel)
((JLabel)c).setText("hi");
组件的
name
属性(即 getName()
和 setName()
)与您在创建它时曾经使用过的变量没有关系。例如,您可以这样做(但不要这样做,因为这非常令人困惑):
Component textField1 = new JLabel("text");
textField1.setName("comboBox1");
System.out.println(textField1.getName()); // comboBox1
无法返回您的
textField1
名称 - 当您调用 getName()
方法时,该变量甚至可能不再存在。您甚至可以创建(和使用)组件,而无需为它们使用显式变量,如下所示:
panel.add(new JLabel("text"));
正如 Jon 所写,您可以将组件强制转换为真实类型,并且不需要原始变量的名称。
当有一个面板作为组件可用时,您可以执行类似的操作,该面板具有两个字段,如标签和文本字段(可以是文本字段和文本字段)。
Component[] components = panel.getComponents();
for (Component component : components) {
if (component instanceof JPanel) {
JPanel subPanel = (JPanel) component;
JLabel label = (JLabel) subPanel.getComponent(0);
JTextField textField = (JTextField) subPanel.getComponent(1);
}
}