我有一個半透明 JPanel。我創建了一個自定義JButton通過擴展JButton,因爲我需要一個圓角的按鈕,並希望添加一些效果。我製作了不透明的。當我將這個按鈕添加到我的半透明JPanel時,它的效果很好。但在翻轉後,黑色補丁畫在按鈕後面,看起來非常糟糕。我在網上搜索了一個解決方案,但無法找到有用的解決方案。這個問題也是在http://www.java.net/node/661798描述,但我沒能真正使kirillcool的建議,制定出.....任何幫助將不勝感激透明JButton仍然繪製其背景
4
A
回答
7
我相信你需要添加:
button.setContentAreaFilled(false);
+0
是的,這很好用 – 2011-12-09 16:33:29
0
不知道,如果有人仍然有興趣... 您可以通過覆蓋paintComponent()
方法來解決問題,讓Java以您喜歡的任何形狀繪製JButton
。您只需要使用setBackground()
方法將Graphics對象的背景設置爲透明。您還需要在使用clearRect()
方法清除圖形對象之前清除圖形對象,然後用JButton
的背景Alpha級別再次填充圖形對象。這是我的一段代碼..它顯示覆蓋paintComponent()
。通過將其粘貼到您的JButton
你應該就算得與圓邊的JButton
其上半TRANSPARANT背景
private int outerRoundRectSize = 10;
private int innerRoundRectSize = 8;
public void paintComponent(Graphics g)
{
int h = getHeight();
int w = getWidth();
Graphics2D g2d = (Graphics2D) g.create();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
Color GP = null;
//////////////get rid of the black background////////////////////////
g2d.setBackground(new Color(0,0,0,0.0f));
g2d.clearRect(0, 0, w, h);
g2d.setPaint(new Color(0,0,0,0.3f));
g2d.fillRect(0, 0, w, h);
//////////////get rid of the black background////////////////////////
ButtonModel model = getModel();
if(!model.isEnabled())
{
setForeground(Color.GRAY);
GP = new Color(0.5f,0.2f,0.6f);
}
else
{
setForeground(Color.WHITE);
if(model.isRollover())
{
GP = new Color(0.5f,0.2f,0.6f);
}
else
{
GP = new Color(0.0f,1.0f,0.0f);
}
}
g2d.setPaint(GP);
Color p1 = null;
Color p2 = null;
if(getModel().isPressed())
{
GP = new Color(1.0f,0.0f,0.0f);
g2d.setPaint(GP);
p1=new Color(0.12f,0.7f,0.3f);
p2=new Color(0.7f,0.5f,0.6f);
}
else
{
p1=new Color(0.0f,0.5f,0.7f);
p2=new Color(0.0f,1.0f,1.0f);
GP = new Color(0.0f,0.0f,1.0f);
}
RoundRectangle2D.Float r2d = new RoundRectangle2D.Float(0, 0, w - 1, h - 1, outerRoundRectSize, outerRoundRectSize);
Shape clip = g2d.getClip();
g2d.clip(r2d);
//g2d.fillRect(0, 0, w, h);
g2d.fillRoundRect(0, 0, w, h, outerRoundRectSize, outerRoundRectSize);
g2d.setClip(clip);
g2d.setPaint(p1);
g2d.drawRoundRect(0, 0, w - 1, h - 1, outerRoundRectSize,outerRoundRectSize);
g2d.setPaint(p2);
g2d.drawRoundRect(1, 1, w - 3, h - 3, innerRoundRectSize,innerRoundRectSize);
g2d.dispose();
super.paintComponent(g);
}
+0
當配置單個屬性時不要編寫自定義代碼執行thrick :-) btw:請學習java命名約定並堅持他們。 – kleopatra 2012-10-26 10:14:08
相關問題
- 1. Java:透明TextArea +繪製背景
- 2. 如何繪製透明背景?
- 3. 帶透明背景的繪圖控制
- 4. 透明Jbutton將與背景圖像
- 5. UIImageView使用不透明繪圖和透明背景繪圖
- 6. JQuery對話框 - 使背景透明,但仍然可移動
- 7. 半透明活動&DialogFragment =仍然顯示的背景
- 8. CSS - 背景顏色集,但仍然透明
- 9. 表單背景的透明度,但仍然有點擊事件
- 10. 透明背景
- 11. 繪圖文本與透明背景
- 12. html透明背景
- 13. 與透明背景
- 14. Iframe透明背景
- 15. webview透明背景
- 16. NSTableCellView透明背景
- 17. UIToolBar背景透明
- 18. Pygame透明背景
- 19. AS3透明背景
- 20. JOGL透明背景
- 21. PHP:透明背景
- 22. Div背景透明
- 23. 透明JFrame背景
- 24. AChartEngine透明背景
- 25. UWP:MapControl透明背景
- 26. 與透明背景
- 27. Recyclerview透明背景
- 28. 透明.png背景
- 29. Imageview背景透明
- 30. 背景不透明
不回答你的問題,但你嘗試下載/使用另一種外觀和感覺,而不是寫作你自己?我在我的最後一個項目中使用了synthetica,並且它非常好,並且「看中了」 – Kaj 2011-05-08 17:32:50