Java - se pueden tener dos métodos de paintComponent(Graphics g) en una misma clase

 
Vista:
sin imagen de perfil

se pueden tener dos métodos de paintComponent(Graphics g) en una misma clase

Publicado por María (1 intervención) el 08/10/2015 00:27:54
Hola, buenas tardes!!!
Soy nueva en java, he estado investigando un poco sobre los componentes en java pero tengo algunas dudas, una de ellas es: se pueden tener dos métodos de paintComponent(Graphics g) en una misma clase? y si es así, se como puedo diferenciarlos o utilizarlos. O sólo se puede renombrar o sobrecargar? y siendo así como diferenciarlos, como mencionaba en la parte superior para hacer uso de otros métodos como el repaint y que éste dibuje los componentes correctos.
De antemano les agradecería mucho sus comentarios, en verdad tengo ganas de aprender y este tipo de foros me parecen muy interesantes para resolver las dudas que yo como muchas personas nuevas en java poseen.
Gracias :)
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
sin imagen de perfil

se pueden tener dos métodos de paintComponent(Graphics g) en una misma clase

Publicado por David (11 intervenciones) el 16/10/2015 14:27:12
Hola, buenos días!

Una manera en que puedes solucionar el problema es tener un booleano como variable de instancia y decidir el comportamiento de paintComponent(Graphics g) en función de él.

Por ejemplo:

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
import javax.swing.JPanel;
 
public class TuClase extends JPanel {
 
    private boolean discriminador;
 
    //... El resto de variables
 
    public TuClase (){
 
        //... Código para el constructor
 
       discriminador = true;  // Por ejemplo (puede ser false, según lo que quieras hacer)
    }
 
    // ... Resto del programa
 
    @Override
    public void paintComponent (Graphics g) {
        if (discriminador) {
            comportamientoUno(g);
        }
        else {
            comportamientoDos(g);
        }
    }
 
    private void comportamientoUno (Graphics g) {
        // Tu código
    }
 
    private void comportamientoDos (Graphics g) {
        // Tu código
    }
}

Si cambias el valor de la variable 'discriminador', tendrás un comportamiento u otro. Si necesitas más de dos comportamientos diferentes, en lugar de un booleano puedes usar un entero y un switch en lugar de un if:

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
import javax.swing.JPanel;
 
public class TuClase2 extends JPanel {
 
    private int discriminador;
 
    //... El resto de variables
 
    public TuClase2 (){
 
        //... Código para el constructor
 
       discriminador = 2;  // Por ejemplo (puede ser 1, 2, 3, 4,..., según lo que quieras hacer)
    }
 
    // ... Resto del programa
 
    @Override
    public void paintComponent (Graphics g) {
        switch (discriminador) {
            case 1 : comportamientoUno(g);
                           break;
            case 2 : comportamientoDos(g);
                           break;
            case 3 : comportamientoTres(g);
                           break;
            default : break;
        }
    }
 
    private void comportamientoUno (Graphics g) {
        // Tu código
    }
 
    private void comportamientoDos (Graphics g) {
        // Tu código
    }
    private void comportamientoTres (Graphics g) {
        // Tu código
    }
}

Si quieres, puedes discriminar el comportamiento dentro de una función:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Override
    public void paintComponent (Graphics g) {
        comportamiento (discriminador, g);
    }
 
    private void comportamiento (int discriminador, Graphics g) {
        switch (discriminador) {
            case 1 : // Tu código
                           break;
            case 2 : // Tu código
                           break;
            case 3 : // Tu código
                           break;
            default : break;
        }
        // Tu código
    }

Creo que éstas son las mejores maneras de hacerlo. Si tienes cualquier duda, no dudes en escribirme. Saludos!!
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
sin imagen de perfil

se pueden tener dos métodos de paintComponent(Graphics g) en una misma clase

Publicado por María (4 intervenciones) el 21/10/2015 05:42:00
Gracias por sus comentarios!!! Lo voy a tomar en cuenta.
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
sin imagen de perfil

se pueden tener dos métodos de paintComponent(Graphics g) en una misma clase

Publicado por David (11 intervenciones) el 26/10/2015 18:48:06
De nada
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