Получить текстовое значение JTextField - PullRequest
0 голосов
/ 08 октября 2010

Я пытаюсь получить текстовое значение из JTextField, но сначала мне нужно привести компонентный объект (java.awt.Component) к JTextFiel ...

mi код такой

Component[] x = this.getComponents(); 
    for(int i = 0; i < x.length; i++)
    {
        if (x[i] instanceof JTextComponent)
        {
               //retrieve text...something like
               //(JTextField)x[i].getText();
        }
    }

Я делаю это, потому что знаю, что все элементы управления страницы mi находятся в «x» (JLabels и JTextField), но они являются компонентами, и поэтому я делаю приведение к JTextField.

Я действительно потерян здесь, и я не знаю, является ли это правильным способом сделать это. Спасибо за ваше время!

Ответы [ 4 ]

4 голосов
/ 08 октября 2010

Я действительно потерян здесь, и я не знаю, если это правильный способ сделать это. Спасибо за ваше время!

Вам никогда не придется писать весь код в одну строку. Таким образом, чтобы упростить вашу задачу, упростите код. Что-то вроде:

Component component = x[i];
JTextField textField = (JTextField)component;
String text = textField.getText();

Таким образом, если у вас ошибка компиляции или что-то еще, компилятор укажет точную строку.

2 голосов
/ 08 октября 2010

Я думаю, вам нужно переосмыслить свой дизайн. Почему бы не выставить метод getText() в классе, который содержит ваш JTextField. Этот метод может удалить ваш JTextField метод getText() и избежать этого ужасного instanceof.

1 голос
/ 08 октября 2010

((JTextComponent) x[i]).getText(); должно работать.

(То, что x[i] является экземпляром JTextComponent, не означает, что оно обязательно JTextField.) Но * JTextComponent имеет .getText() так что приведение к JTextComponent должно быть в порядке.

0 голосов
/ 16 ноября 2012

Через API отражения.Просто для расширения горизонтов =)

import java.lang.reflect.Method; 

...

  for ( Component component : this.getComponents() ) {
    try {
      Method getText = component.getClass()
        .getDeclaredMethod("getText");
      String text = (String)getText.invoke();

        //Do something with text

    } catch ( Exception exc ) {} // no such method
  }
...