2017-03-01 52 views
0

我有一個應用程序有一個默認的外觀和感覺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的代表團是錯誤的,但我無法理解如何忽略當前的德福對一個自定義項目。任何想法?

在諮詢感謝名單

+1

爲什麼'MyButton'的類構造函數名爲'JChatButton(String text,int lineHeight)'? – ahoxha

+0

@ A2H錯過,同時用通用摘要名稱更改了我的代碼。固定 – MrPk

+0

我試過不覆蓋'getUIClassID()'或者只是返回'ButtonUI',我可以看到方法的變化:'setOpaque,setFont,setBackgroun'等。這不是你想要完成的嗎? – ahoxha

回答

2

你不能把這個

UIManager.put("MyButton","javax.swing.plaf.ButtonUI"); 

因爲ButtonUI類的靜態方法creatUI()(實際上它是從的ComponentUI類)拋出Error

public static ComponentUI createUI(JComponent c) { 
     throw new Error("ComponentUI.createUI not implemented."); 
    } 

所以用javax.swing.plaf.basic.BasicButtonUI

1

ignoring current Look and Feel

如果我理解你的要求,我認爲最簡單的方法是重寫JButton#updateUI() - 看到關閉按鈕的選項卡上的教程:

private class TabButton extends JButton implements ActionListener { 
    public TabButton() { 
     //... 
    } 

    //we don't want to update UI for this button 
    public void updateUI() { 
    } 
+0

Thanx,我會調查這 – MrPk

+0

驗證,不工作,如果不做任何事情 – MrPk

相關問題