我有一個應用程序有一個默認的外觀和感覺(insubstantial
)和許多默認設置好的,比如像:如何創建自定義的JComponent(如一個JButton)忽略當前外觀
UIManager.put("List.foreground", Color.BLACK);
UIManager.put(xyz, zyzLEF);
//around 150 istructions like that
這應用程序是巨大的,有很多超越客戶端的需求,但現在我需要創建我自己的JButton
與一些設置(Foreground
,Background
,Font
等),不作爲我想要的行爲由於默認 (例如,setOpaque(true||false)
對此沒有影響所有)。
所以我想創建自己的JButton
忽略默認的外觀和感覺,是這樣的:
public class MyButton extends JButton {
public MyButton(String text, int lineHeight)
{
super(text);
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
setBackground(Color.WHITE);
//foo
setOpaque(true);
}
@Override
public String getUIClassID() {
return "MyButton";
}
,並在啓動時:
UIManager.put("MyButton","javax.swing.plaf.ButtonUI");
這個原因這個錯誤:
UIDefaults.getUI() failed: createUI() failed for com.foo.MyButton[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=null,paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Hello World,defaultCapable=true] java.lang.reflect.InvocationTargetException
java.lang.Error
at javax.swing.UIDefaults.getUIError(UIDefaults.java:732)
at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:130)
我敢打賭,UIManger的代表團是錯誤的,但我無法理解如何忽略當前的德福對一個自定義項目。任何想法?
在諮詢感謝名單
爲什麼'MyButton'的類構造函數名爲'JChatButton(String text,int lineHeight)'? – ahoxha
@ A2H錯過,同時用通用摘要名稱更改了我的代碼。固定 – MrPk
我試過不覆蓋'getUIClassID()'或者只是返回'ButtonUI',我可以看到方法的變化:'setOpaque,setFont,setBackgroun'等。這不是你想要完成的嗎? – ahoxha