2016-04-22 13 views
0

私は独自のOptionPaneUIでBasicOptionPaneUIをオーバーライドします。しかし、私が作成するJOptionPanesは、BasicOptionPaneUIによってまだ描画されます。ここでJOptionPaneはUIDefaultsで指定されたOptionPaneUIを無視します

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 

とANです私のUIを嫌うオプションのペインです。 MyButtonUIは、同じ方法で魅力的に動作します。

私は何を見落としますか?

答えて

0

私が見落としたことは、新しいMyOptionPaneUIを返すようにcreateUI()メソッドをオーバーライドすることだったことが判明しました。-

関連する問題