Recientemente leí este hilo (Creating a custom button in Java) sobre cómo crear botones personalizados en java extendiendo la clase JButton, sin embargo, todas las soluciones en este hilo usan gráficos dibujados en java.¿Cómo crear un JButton personalizado en Java con una base de imagen?
Quería tener mi botón basado en una imagen de botón que había dibujado en photoshop. Así que traté de aplicar lo que he leído en ese hilo con este resultado:
import javax.swing.*;
import java.awt.*;
public class nextButton extends JButton {
@Override
protected void paintComponent(Graphics g) {
Image image = new ImageIcon("nextButton.png").getImage();
g.drawImage(image,0,0,this);
}
@Override
public Dimension getPreferredSize() {
Dimension size = super.getPreferredSize();
size.setSize(75, 150);
return size;
}
}
Cuando ejecuto el programa principal que se incrementa en este botón para un JPanel que no se vea. Supongo que podría ser una de varias razones:
a) ¿El tamaño del JButton no coincide con la imagen? b) No he cargado la imagen correctamente. En las notas que mi profesor me dio, escribe el código de imagen de la pantalla con solo "imageName.png" sin ruta de archivo, así que no tengo idea si esta es la forma correcta de hacerlo, o cómo el programa sabrá cargar la imagen . c) Algo más que no tengo conocimiento hasta ahora.
Si alguien sabe cómo resolver esto, estaría muy agradecido.
¡Muchas gracias!
un par de comentarios, más o menos relacionada con su problema: a) la anulación paintComponent es b ilegal) de nunca jamás _change_ nada en un captador c) en particular, setSize se hace por LayoutManager de todos modos, no tendrá efecto en una aplicación sana d) es correcto anular getPreferredSize y devolver una sugerencia de tamaño razonable, basada en las partes internas del componente, que podría ser del tamaño de la imagen e) no volver cargue la imagen en pintura (¡sin levantar objetos pesados en el ciclo de pintura!), en lugar de cargarlo una vez en el tiempo de construcción – kleopatra
por cierto, aprenda las convenciones de nomenclatura de Java y adhiérase a ellas – kleopatra