2011-01-03 60 views
36

Có thể tạo ra một JButton trong suốt (bao gồm cả đường viền) nhưng không phải là văn bản không? Tôi mở rộng JButton của swing và ghi đè lên điều này:JButton trong suốt

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

nhưng nó làm cho mọi thứ trong suốt, bao gồm cả văn bản. Cảm ơn.

+0

Vì vậy, về cơ bản bạn muốn có 'JButton' không có văn bản? – jjnguy

+6

Tôi nghĩ anh ấy muốn JButton chỉ với văn bản. – jzd

+10

Sơn tùy chỉnh (khi cần) được thực hiện bằng cách ghi đè phương thức paintComponent(), không phải phương thức paint(). – camickr

Trả lời

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

Rất tiếc, câu trả lời của tôi trông giống như của bạn. – jjnguy

+0

Cảm ơn bạn. – Rendicahya

+1

setOpaque đã cứu mạng tôi :) – Birdy

10

Sau đây nên thực hiện thủ thuật.

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