Respuesta a: Duda con clases abstractas

#12382

FrankMegia
Participante

Hola Cristian:

Bueno, no te preocupes que nadie nace sabiendo, y practicando y cometiendo errores es como se aprende. Al menos así aprendí yo 🙂

Te voy a poner con palabras ( no con código) cómo sería la clase que hereda de JPanel (e implementa ActionListener) donde tendrás el botón y donde aparecerá la imagen:

– Constructor: Declarar e instanciar el botón, añadirle el actionListener al botón y finalmente añadir el botón a la lamina. (Esto ya lo tenías hecho tú).

– Sobreescribir el método paintComponent: Como habrás visto en el curso, cuando se sobreescribe este método es muy aconsejable llamar al método que sobreescribimos de la clase padre(JPanel), y para eso tenemos el super. Hecho esto, ya puedes dibujar la imagen con los parámetros que tenías.

– Implementar el método actionPerformed (dónde parece que tienes el problema):  Como bien hiciste tú, almacenas la imagen en la variable de tipo Image que ya tenías creada, dentro de un try/catch. Y acto seguido, llamas al método que solicita que se repinte el componente, en este caso, repaint(). Como el método ya viene heredado por cadena de herencia en el JPanel, no necesitas instanciar nada, solo llamarlo directamente. Igual que haces con el método ‘add’ que tampoco le pones nada delante. En el catch solo tienes que poner el mensaje de error.

Y ya estaría hecho. Resumiendo: cuando pulsas el botón, entra en el actionPerformed, carga la imagen y pides que se repinte el panel. Como lo tienes sobreescrito(paintComponent), primero dibujará de la forma que lo hace habitualmente el JPanel, de ahí la llamada a super…, y después dibuja la imagen cargada.

Espero que te quede un poco más claro así. Ya me contarás.

Un saludo.