我有一个应用程序有一个默认的外观和感觉(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