在swing中使用getComponent()调用变量

问题描述 投票:0回答:3

好吧,这可能看起来像是一个奇怪的问题,但是有没有一种方法可以在调用类似

jPanel3.getComponent(0).getName();


之类的内容之后,我可以使用该值来调用变量。基本上如果它返回说jLabel1。我可以用它来调用该标签上的某些内容,例如 .setText("Hi");而不必输入 jLabel1.setText("hi")。意思是我可以使用返回值直接调用它的函数吗?

java swing netbeans
3个回答
1
投票

如果我正确理解了这个问题,你想要这样的东西:

Component c=jPanel3.getComponent(0);
if (c instanceof JLabel)
    ((JLabel)c).setText("hi");

1
投票

组件的

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 所写,您可以将组件强制转换为真实类型,并且不需要原始变量的名称。


0
投票

当有一个面板作为组件可用时,您可以执行类似的操作,该面板具有两个字段,如标签和文本字段(可以是文本字段和文本字段)。

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);
                }
            }
© www.soinside.com 2019 - 2024. All rights reserved.