2016-04-22 83 views
0

中指定的OptionPaneUI我想用我自己的OptionPaneUI重写BasicOptionPaneUI。但是,我创建的JOptionPanes仍然被BasicOptionPaneUI绘制。JOptionPane忽略在UIDefaults

这里是initClassDefaults法在我的自定义外观和感觉:

@Override 
protected void initClassDefaults(UIDefaults table) { 

    super.initClassDefaults(table); 
    final String packageName = "my.own.plaf.ui."; 

    System.out.println(table.get("OptionPaneUI")); 

    Object[] uiDefaults = { 
    "ButtonUI", packageName + "MyButtonUI", 
    "OptionPaneUI", packageName + "MyOptionPaneUI", 
    }; 
    table.putDefaults(uiDefaults); 

    System.out.println(table.get("OptionPaneUI")); 
} 

而我的主要方法:

public static void main(String[] args) { 

    try { 
    UIManager.setLookAndFeel(new MyOwnLookAndFeel()); 
    } catch (UnsupportedLookAndFeelException e) { 
    e.printStackTrace(); 
    } 

    JOptionPane optionPane = new JOptionPane(); 
    System.out.println("My UIClassID is: " + optionPane.getUIClassID()); 
    System.out.println("Current implementation: " + optionPane.getUI().getClass().getSimpleName()); 
    JOptionPane.showMessageDialog(null, "Ping"); 

} 

我得到的输出是

javax.swing.plaf.basic.BasicOptionPaneUI 
my.own.plaf.ui.MyOptionPaneUI 
My UIClassID is: OptionPaneUI 
Current implementation: BasicOptionPaneUI 

和选项窗格,这是igoring我的用户界面。 MyButtonUI,我用相同的方式定义,就像一个魅力。

我忽略了什么?

回答

0

原来,我忽略的是重写createUI() - 方法,以便它返回一个新的MyOptionPaneUI。-.-。