2017-03-01 35 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

相关问题