2010-10-07 2 views
0

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

миль кода, как это

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

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

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

ответ

1

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

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

2

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

3

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

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

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

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

+1

+1 млн. Точек для моего любимого предложения новым программистам. Не пытайтесь делать все на одной линии. Иногда просто выписывание шагов сложной последовательности помогает мне ловить ошибки перед неприятной спиралью компиляции/отладки. –

+0

это отличный совет, спасибо! –

0

Через отражение 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 
    } 
Смежные вопросы