JOptionPane忽略UIDefaults

时间:2016-04-22 22:50:06

标签: java swing user-interface joptionpane look-and-feel

我想用自己的OptionPaneUI覆盖BasicOptionPaneUI。但是,我创建的JOptionPanes仍然由BasicOptionPaneUI绘制。

以下是我自定义外观中的initClassDefaults-Method:

@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

和一个隐藏我的UI的选项窗格。 MyButtonUI,我定义的方式与魅力相同。

我忽略了什么?

1 个答案:

答案 0 :(得分:0)

原来我忽略的是覆盖createUI() - Method,以便它返回一个新的MyOptionPaneUI。-.-