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

5t7ly7z5  于 2023-10-20  发布在  其他
关注(0)|答案(3)|浏览(112)

好吧,这可能看起来像一个奇怪的问题,但有没有一种方法,在调用类似
jPanel3.getComponent(0).getName();
我可以用这个值来调用变量。基本上,如果它返回jLabel1。我可以用它来调用标签上的东西,比如. setText("Hi");而不必键入jLabel1.setText("hi")。这意味着我可以使用返回值直接调用它的函数。

qlvxas9a

qlvxas9a1#

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

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

8ehkhllq2#

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

xj3cbfub

xj3cbfub3#

当有一个面板作为组件可用时,你可以这样做,它有两个字段,如label和textfields(它可以是textfield和texfield)。

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);
                }
            }

相关问题