2016-10-04 1 views
1

Я пытаюсь вернуть несколько JTextField с использованием метода геттера, но у меня все еще нет идеи, могу ли я вернуть их как объемный. Я знаю, как вернуть один JTextField, используя это.Как вернуть несколько JTextField с помощью JComponent?

public JTextField getJTextField() 
{ 
    return this.tfLastName; 
} 

Но я хотел бы вернуться несколько JTextField, поэтому я перешел на параметру JComponent я немножко стек здесь, в этой части.

public JTextField getJTextField(JComponent input) 
{ 
} 

Кстати, я использую построитель GUI. Любые советы или помощь будут оценены!

+0

tfLastName является одной textfiled в вашем классе. Вы также объявили массив текстового поля? –

+0

Что вы подразумеваете под 'using JComponent'? Что ожидает «JTextField»? Вы можете просто использовать getter, возвращающий Array. Просто нужно знать, какие компоненты вы хотите – AxelH

ответ

3

Попробуйте это:

public List<JTextField> getAllJTextField(JComponent input) { 
    List<JTextField> list = new ArrayList<JTextField>(); 
    for (Component c : input.getComponents()) { 
     if (c.getClass().equals(JTextField.class)) { 
      list.add((JTextField)c); 
     } 
    } 
    return list; 
} 

или если вы хотите более универсальный метод:

public static <T extends Component> List<T> getAllJTextField(JComponent input, T clazz) { 
    List<T> list = new ArrayList<T>(); 
    for (Component c : input.getComponents()) { 
     if (c.getClass().equals(clazz)) { 
      list.add((T)c); 
     } 
    } 
    return list; 
} 
+1

Это лучше, чем ответ OP, поскольку он является агностиком проекта и может быть превращен в функцию public public utility. +1 – XenoRo

+0

Просто нужно улучшить это для 'JPasswordField' или других подклассов' JTextField', но это способ сделать это. – AxelH

+0

@AxelH спасибо за хорошие идеи. Я отредактировал свой ответ. –

0

Я нашел способ, как вставить несколько JTextField:

public JTextField[] getJTextField() 
{ 
    JTextField[] textField = new JTextField[3]; 
    textField[0] = tfLastName; 
    textField[1] = tfFirstName; 
    textField[2] = tfMiddleName; 
    textField[3] = tfNickname; 

    return textField; 
} 
+0

Просто нужно вернуть TextField Array, ваш получатель в порядке. – AxelH

+0

Фрэнсис, боюсь, это может быть плохой дизайн для того, чего вы, вероятно, хотите достичь. Я не вижу много ситуаций, когда вам нужно будет возвращать компоненты «List» или «Array» в Swing в том виде, в котором вы их используете. Похоже, что это может быть отклонением от правильного дизайна MVC (Model-View-Controller), что и было разработано Swing (что вдвойне верно для NetBeans и большинства других разработчиков GUI). Не могли бы вы отредактировать вопрос, чтобы больше узнать о вашей проблеме? Или, другими словами, что вы пытаетесь достичь, что требует возврата нескольких текстовых полей? – XenoRo

Смежные вопросы