Java Reflect JTextfield

4 respostas
G

Ola
Preciso saber se JTextField esta vazio a partir de Java Reflect field porem da erro.
Nao eh possivel fazer cast de Field para JTextField
Alguem pode me dar uma dica de como fazer isso via Java Reflect ??

Class cls = this.getClass();
            result += "[[" + this.getClass().getName() + "[\n";
            Field fieldlist[] = cls.getDeclaredFields();
            for (int i = 0; i < fieldlist.length; i++) {
                Field fld = fieldlist[i];
                fld.setAccessible(true);
                if (fld.getType().getSimpleName().equals("JTextField")){
                    comp = (Object) fld;
                    if ( (JTextField) comp).gettext().equals(""){
                       System.out.println( " JTextfield esta vazio " );
                     }
                }

4 Respostas

Marky.Vasconcelos

Field é um objeto abstrato que representa um campo.

Para pegar o JTextField que ele representa é necessario usar o método get de Field passando como argumento um objeto concreto do tipo que voce está fazendo Reflection. no seu caso é o “this”, por que o campo está nesta classe.

yoshikichi

gabriel hilbig:
Ola
Preciso saber se JTextField esta vazio a partir de Java Reflect field porem da erro.
Nao eh possivel fazer cast de Field para JTextField
Alguem pode me dar uma dica de como fazer isso via Java Reflect ??

Class cls = this.getClass(); result += "[[" + this.getClass().getName() + "[\n"; Field fieldlist[] = cls.getDeclaredFields(); for (int i = 0; i < fieldlist.length; i++) { Field fld = fieldlist[i]; fld.setAccessible(true); if (fld.getType().getSimpleName().equals("JTextField")){ comp = (Object) fld; if ( (JTextField) comp).gettext().equals(""){ System.out.println( " JTextfield esta vazio " ); } }

O método que vc verifica se o JTextField tem algum texto é isso?
Se for:
Vc tem que invocar o método getText do JTextField.

Method me= object.getClass().getMethod("getText");
String retorno=me.invoke();
if(retorno.equals(""))//sua lógica
G

Ola Obrigado pelas respostas

Resultado do FIELD.GET(i) - NÃO ESTÁ RETORNANDO VALOR DO COMPONENTE
ESTÁ RETORNANDO PROPRIEDADES

Estou rodando este codigo para teste em um JFrame

String result = "";
            Class cls = this.getClass();
            result += "[[" + this.getClass().getName() + "[\n";
            Field fieldlist[] = cls.getDeclaredFields();
            for (int i = 0; i < fieldlist.length; i++) {
                Field fld = fieldlist[i];
                fld.setAccessible(true);
                
                if (fld.getType().getSimpleName().equals("JTextField")){

                    comp = (Object) fld;
                }



                result += "field [\n";
                result += "name = " + fld.getName() + "\n";
                result += "type = " + fld.getType() + "\n";
                int mod = fld.getModifiers();
                result += "modifiers = " + Modifier.toString(mod) + "\n";
            try {
                result += "value = " + fld.get(this) + "\n";
            } catch (IllegalArgumentException ex) {
                Logger.getLogger(Cadastro.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(Cadastro.class.getName()).log(Level.SEVERE, null, ex);
            }
                result += "]\n";
            }
            result += "]" + "\n";

            System.out.println(result);

Quando o componente é um JTestField o resultado de FIELD.GET(i) é

field [
name = ed_ENDER
type = class javax.swing.JTextField
modifiers = private
value = javax.swing.JTextField[,10,70,370x25,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@1b04310,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],disabledTextColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],selectionColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],columns=0,columnWidth=0,command=,horizontalAlignment=LEADING]
]
yoshikichi

Olá pessoal tudo bem?
Então iria responder ontem quando resolvi o problema aqui, mas nao deu tempo.
Então como se coloca resolvido no tópico?

Só para manter registrado, o problema era que a versão 6 do red hat enterprise não estava reconhecendo a placa de video SIS.
O modo grafico era abortado, agora não sei se era por causa do pau na placa de video, ou era pau na versão red hat mesmo.
Instalei a versão 5 do red hat, e o modo grafico funcionou, até deu a opção de escolher kde ou gnome

abraços

Criado 3 de dezembro de 2010
Ultima resposta 7 de dez. de 2010
Respostas 4
Participantes 3