2011-01-03 10 views
36

È possibile rendere trasparente un JButton (incluso il bordo) ma non il testo? Estendo lo swing JButton e lo sostituisco:Transparent 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(); 
} 

ma rende tutto trasparente, incluso il testo. Grazie.

+0

Quindi fondamentalmente vuoi un 'JButton' senza testo? – jjnguy

+6

Penso che voglia il JButton con solo il testo. – jzd

+10

La verniciatura personalizzata (quando richiesto) viene eseguita sovrascrivendo il metodo paintComponent(), non il metodo paint(). – camickr

risposta

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

Oops, la mia risposta è uguale alla tua. – jjnguy

+0

Grazie comunque. – Rendicahya

+1

setOpaque mi ha salvato la vita :) – Birdy

10

Il seguente dovrebbe fare il trucco.

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); 
    } 
}