2011-01-03 31 views
36

¿Es posible hacer un JButton transparente (incluido el borde) pero no el texto? Extiendo el JButton de swing y anulo esto:Transparente JButton

@Override 
public void paint(Graphics g) { 
    Graphics2D g2 = (Graphics2D) g.create(); 
    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0)); 
    super.paint(g2); 
    g2.dispose(); 
} 

pero hace que todo sea transparente, incluido el texto. Gracias.

+0

¿Así que básicamente quieres un 'JButton' sin texto? – jjnguy

+6

Creo que quiere el JButton solo con el texto. – jzd

+10

La pintura personalizada (cuando se requiere) se realiza anulando el método paintComponent(), no el método paint(). – camickr

Respuesta

98
button.setOpaque(false); 
button.setContentAreaFilled(false); 
button.setBorderPainted(false); 
+1

Vaya, mi respuesta es igual a la tuya. – jjnguy

+0

Gracias de todos modos. – Rendicahya

+1

setOpaque me salvó la vida :) – Birdy

10

El siguiente debería hacer el truco.

public class PlainJButton extends JButton { 

    public PlainJButton (String text){ 
     super(text); 
     setBorder(null); 
     setBorderPainted(false); 
     setContentAreaFilled(false); 
     setOpaque(false); 
    } 

    // sample test method 
    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     JPanel pane = new JPanel(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pane.add(new PlainJButton("HI!!!!")); 
     frame.add(pane); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
}