設置半透明的JMenuBar(2008.7.20);
源作:陳思羽.更新:龔德偉. 2008.07.20
效果圖

更新的內容:
優化了paint方法,不需要每次都創建一個BufferedImage.
修正了鼠標開時時菜單項背景不會變成半透明的問題
支持菜單普通情況下和鼠標選中時兩種半透明設定
修正鼠標選中菜單時,文字變成不透明





























































































































































































































posted on 2008-05-19 16:36 相信 閱讀(4339) 評論(12) 編輯 收藏 所屬分類: Swing文章
posted on 2008-05-19 16:36 相信 閱讀(4339) 評論(12) 編輯 收藏 所屬分類: Swing文章
//精簡后的代碼
public class CustomMenuItemUI extends BasicMenuItemUI {
public static ComponentUI createUI(JComponent c) {
return new CustomMenuItemUI();
}
@Override
public void installUI(JComponent c) {
super.installUI(c);
menuItem.setOpaque(false);
}
public void paint(Graphics g, JComponent comp) {
//復制一個graphics
Graphics2D gx = (Graphics2D) g.create();
// do an alpha composite
//0.8f 就是透明度.值越小 透明度越大
gx.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f));
//將控件畫到半透明 的畫布上
super.paint(gx, comp);
//graphics使用后要銷毀,這是良好習慣
gx.dispose();
}
} 回復 更多評論
run:
UIDefaults.getUI() failed: no ComponentUI class for: javax.swing.JMenuItem[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=null,paintBorder=false,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Open]
java.lang.Error
at javax.swing.UIDefaults.getUIError(UIDefaults.java:711)
at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:133)
at javax.swing.UIDefaults.getUI(UIDefaults.java:741)
at javax.swing.UIManager.getUI(UIManager.java:1016)
at javax.swing.JMenuItem.updateUI(JMenuItem.java:232)
at javax.swing.JMenuItem.init(JMenuItem.java:194)
at javax.swing.JMenuItem.<init>(JMenuItem.java:133)
at javax.swing.JMenuItem.<init>(JMenuItem.java:110)
at customtransparencemenu.example.MenuTest.main(MenuTest.java:47)
UIDefaults.getUI() failed: no ComponentUI class for: javax.swing.JPopupMenu[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,desiredLocationX=0,desiredLocationY=0,label=,lightWeightPopupEnabled=true,margin=,paintBorder=true]
java.lang.Error
at javax.swing.UIDefaults.getUIError(UIDefaults.java:711)
at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:133)
at javax.swing.UIDefaults.getUI(UIDefaults.java:741)
at javax.swing.UIManager.getUI(UIManager.java:1016)
at javax.swing.JPopupMenu.updateUI(JPopupMenu.java:207)
at javax.swing.JPopupMenu.<init>(JPopupMenu.java:172)
at javax.swing.JPopupMenu.<init>(JPopupMenu.java:157)
at javax.swing.JMenu.ensurePopupMenuCreated 回復 更多評論
UIManager.put("MenuItemUI", "CustomMenuItemUI");
我覺得問題在這里,好像是要需要設置 開發人員默認值 不知道對不對???
如果對的話。請問在哪設置? 回復 更多評論
解決了,哈哈 前后不到五分鐘,看來我還行。
這樣解決的:
String popUI = CustomMenuItemUI.class.getName();
UIManager.put("MenuItemUI", popUI);
我想順便問一下,你是怎么做的?是不是你配置了一個 swing.properties屬性文件?還是怎么的?
回復 更多評論
只有注冊用戶登錄后才能發表評論。 | ||
![]() |
||
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關文章:
|
||