Java - TextField.setBackground no funciona

   
Vista:

TextField.setBackground no funciona

Publicado por Sergio (3 intervenciones) el 18/03/2016 20:39:52
Hola,me ha surgido el siguiente problema, tengo que cambiar el color de fondo de un Textfield y para ello implemento el método .setBackground(Color.red). La función donde esta implementado se ejecuta correctamente. He comprobado que la linea entra con un System.out.println, he revisado los imports y todo parece correcto. De hecho esto ha estado funcionando hasta hace poco. He hecho una prueba con un TextArea en el mismo proyecto y si me funciona, pero en los TextFields no.
¿Podéis orientarme sobre cual puede ser el motivo por el que no cambie de color?.
Os paso detalle del codigo donde lo utilizo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public static boolean enter_ID() {
        int position;
        boolean check = false;
 
        if (F_Create_Admin.TF_ID_Card.getText().isEmpty()) {
             F_Create_Admin.L_Confirm_ID_Card.setIcon(Singleton.noncomplying);
            F_Create_Admin.TF_ID_Card.setBackground(Color.red);
            F_Create_Admin.TF_ID_Card.requestFocus();
            check = false;
            F_Create_Admin.L_Info.setText(SLanguages.lang.getProperty("TF_no_empty"));
            F_Create_Admin.L_Info.setBackground(Color.red);
 
        } else if (Validate.v_ID_Card(F_Create_Admin.TF_ID_Card.getText()) == false) {
            F_Create_Admin.L_Confirm_ID_Card.setIcon(Singleton.noncomplying);
            F_Create_Admin.TF_ID_Card.setBackground(Color.red);
            F_Create_Admin.TF_ID_Card.requestFocus();
            check = false;
            F_Create_Admin.L_Info.setText(SLanguages.lang.getProperty("id_incorrect"));
        } else {
 
            Admin admin = new Admin(F_Create_Admin.TF_ID_Card.getText());
            position = BLL_Admins.search_admins(admin);
            if (position >= 0) {
                F_Create_Admin.L_Confirm_ID_Card.setIcon(Singleton.noncomplying);
                F_Create_Admin.TF_ID_Card.setBackground(Color.red);
                F_Create_Admin.TF_ID_Card.requestFocus();
                check = false;
                F_Create_Admin.L_Info.setText(SLanguages.lang.getProperty("Id_exist"));
            } else {
                F_Create_Admin.L_Confirm_ID_Card.setIcon(Singleton.complying);
                F_Create_Admin.TF_ID_Card.setBackground(Color.green);
                F_Create_Admin.TF_Name.requestFocus();
                if (F_Create_Admin.TF_Name.getText().equals("NAME")) {
                    F_Create_Admin.TF_Name.setText("");
                }
                F_Create_Admin.L_Info.setText("");
                check = true;
            }
 
        }
        return check;
    }//End of enter ID Function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

TextField.setBackground no funciona

Publicado por Tom (914 intervenciones) el 18/03/2016 21:09:33
Debería funcionar (acabo de probar algo parecido, con Java8 y swing) así que, o algo está impidiendo que se redibuje el componente tras el cambio de color, o algún otro evento posterior lo vuelve a dejar como estaba antes de que se redibuje ...
Me temo que, si hay algún problema, no está en la parte de código que has puesto ... aunque podría ocurrir que alguna sentencia previa a setBackground() provocara una excepción que no estás controlando ...


Quizás deberías analizar con cuidado lo que has cambiado en el proyecto (o externamente, como la versión de java por ejemplo).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

TextField.setBackground no funciona

Publicado por Sergio (3 intervenciones) el 18/03/2016 21:40:32
Revisare de nuevo el código en base a tus comentarios, pero creo que he agotado todas las opciones, ya que el único evento que redibuja el campo es cuando el dato introducido es válido, como podrás observar en la función posteada. Sobre el formulario solo actúan las funciones que controlan la validez de los datos introducidos. Externamente no hay nada que actúe sobre los mismos. En cuanto a la versión de Java, esta no ha sido modificada.La única modificación implementada ha sido la incorporación de un jTable de usuarios desde el que se invoca al formulario de crear y modificar los datos de usuario, pero este no influye en las funciones de dichos formularios.Lo curioso es que bajo las mismas condiciones un TextArea si que responde a la validación de los datos. La verdad es que no sé que otras opciones me quedan. De todas maneras muchas gracias por responder.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

TextField.setBackground no funciona

Publicado por Sergio (3 intervenciones) el 27/03/2016 20:44:29
Hola, expongo aquí la solución al problema por si en un futuro le puede servir a alguien. El problema venia dado por la invocación a un look & feel que se realizaba en el constructor del JTable desde el que se abren los formularios. Me explico, tengo un Jtable desde el cual, con unos botones, abro los formularios en los que tengo que pintar el fondo del textfield. Pues bien, es en el constructor de ese Jtable donde se invoca al look & feel. Tan solo he tenido que eliminarlo y los textfields han vuelto a responder al método setBackgound.
Captura-de-pantalla-de-2016-03-27-200340
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar