【问题标题】:How can I use Methods of a class without knowing the type?如何在不知道类型的情况下使用类的方法?
【发布时间】:2013-05-21 11:03:47
【问题描述】:

我有以下问题:我有一个名为 activeCenter 的 JPanel,我在使用我的程序时会不时在其中保存不同的 JPanel。在这些 JPanel 中有一堆 JTextfields、JLabels 和一个 JButton。 现在我想获取所有文本字段的文本(数量是已知的)。我现在的问题是:我使用 for 循环遍历 JPanel 中的所有组件并检查它是否为 JTextfield。这里的问题是,如果是 JTextField,我该如何使用 Method getText()?我只有组件,不知道如何使用 JTextField 中的方法。有没有办法解决这个问题而不必将 JTextFields 保存在数组中?以下是相关代码:

button.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    for(Component c: activeCenter.getComponents())
    {
      if(c.getClass() == JTextField.class)
      {
        //use the Method getText() on c
      }
    }
  }
});

【问题讨论】:

    标签: java class components jtextfield gettext


    【解决方案1】:

    你需要像这样转换你的 c 对象:

    String text = null;
    if (c instanceof JTextField) {
        text = ((JTextField)c).getText();
    }
    

    另请注意,您可以将 instanceof 关键字用于您的 if 条件。

    【讨论】:

      【解决方案2】:

      您可以将其转换为 JTextField:

      ((JTextField) c).getText();

      【讨论】:

        【解决方案3】:

        如果我是你,我会进行重新设计:创建一个包含 JPanel 的类并使其实现 Iterable<JTextField>。创建两个.addComponent()方法:一个专门添加一个JTextField,另一个添加一个Component。将JTextField 元素存储在List 中。

        Iterable<JTextField> 的实现就这么简单:

        @Override
        public Iterator<JTextField> iterator()
        {
            return textFields.iterator();
        }
        

        您可以使用 foreach 循环:

        for (final JTextField textField: activeCenter)
            // use textField.getText()
        

        【讨论】:

          猜你喜欢
          • 2016-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-04
          • 1970-01-01
          • 2012-09-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多