2011-02-04 15 views
51

me gustaría usar una imagen como un botón en Java, y traté de hacer esto:Java: el uso de una imagen como un botón

BufferedImage buttonIcon = ImageIO.read(new File("buttonIconPath")); 
button = new JButton(new ImageIcon(buttonIcon)); 

Pero esto aún muestra el botón que está detrás de la imagen, solo me gustaría que la imagen funcione como el botón, ¿cómo puedo hacer esto?

Respuesta

26

Quitar el borde de esta manera:

button.setBorder(BorderFactory.createEmptyBorder()); 

y luego también el contenido :

button.setContentAreaFilled(false); 

: Tomado de la solución añadida a la pregunta por @ 3sdmx

+0

Esto hizo un truco, pero todavía hay algún tipo de fondo del botón en sí, ¿hay alguna manera de eliminarlo por completo? ¿O establecerlo transparente? – 3sdmx

+0

Puede intentar configurar el fondo en otro color o transparente. ¿Su imagen tiene transparencia o es un cuadrado sólido? – jzd

8

Una sugerencia sería establecer la imagen como una etiqueta y agregar un oyente de mouse a la etiqueta para detectar clics.

Ejemplo:

ImageIcon icon = ...; 

JLabel button = new JLabel(icon); 

button.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mouseClicked(MouseEvent e) { 
    ... handle the click ... 
    } 
}); 
+0

Esto funcionó para mi situación. – SingleShot

0

Por lo que sé, no hay una manera fácil de hacerlo, tendrá que reemplazar el método "paintComponent" de la clase JButton a aint su imagen, si sólo desea para mostrar una imagen y se comportan como un botón, se puede añadir un wich JPanel dibuja la imagen (clicky) y añadir un MouseListener/MouseAdapter manejar la "mousePressed" evento

1

buttonIcon.setBorder (nuevo EmptyBorder (0,0 , 0,0));

+0

Esto todavía pinta lo que parece una versión muy pequeña del borde del botón, al menos en MacOS. – SingleShot

1
button.setBorderPainted(false); 
+0

Esto todavía pinta el borde/relleno del botón, al menos en MacOS. – SingleShot

1

Esto se puede hacer fácilmente en NetBeans estableciendo el contentAreaFilled propiedad en False

1
BufferedImage buttonIcon = ImageIO.read(new File("myImage.png")); 
    button = new JButton(new ImageIcon(buttonIcon)); 
    button.setBorderPainted(false); 
    button.setFocusPainted(false); 
    button.setContentAreaFilled(false); 
1

acaba de escribir este

button.setContentAreaFilled(false); 
0

Seguí los pasos siguientes y que podría crear un ' ImageButton 'con éxito.

  1. Crear una JButton
  2. añade un detector de acción
  3. Establecer un icono de imagen (tenga en cuenta que he colocado el icono info.png en el directorio src \ carpeta principal \ recursos y cargado mediante el cargador de clases). La estructura del proyecto es como aquí.Project folder structure
  4. fijó un vacío Border
  5. personas de movilidad reducida el área de contenido de relleno
  6. ha deshabilitado el focusability
  7. añade a la contentPane

PFB el código que funcionó para mí

JButton btnNewButton = new JButton(""); 
btnNewButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("Info clicked"); 
    } 
}); 

String iconfilePath = this.getClass().getClassLoader().getResource("info.png").getFile(); 
btnNewButton.setIcon(new ImageIcon(iconfilePath)); 
btnNewButton.setBounds(10, 438, 39, 31); 
btnNewButton.setBorder(BorderFactory.createEmptyBorder()); 
btnNewButton.setContentAreaFilled(false); 
btnNewButton.setFocusable(false); 
contentPane.add(btnNewButton); 

El El botón de salida resultante del código anterior es el siguiente

enter image description here