Могу ли я применить внешний вид системы только к одному элементу управления?


В своем приложении Swing я использую субстанцию look and feel в своих фреймах. Но для целей дизайна я хочу показать одну кнопку J с родным внешним видом системы. Я вижу, что могу применить определенный пользовательский интерфейс, например:

myButton.setUI( new javax.swing.plaf.metal.MetalButtonUI() ); 

Но могу ли я применить системный интерфейс по умолчанию к этой кнопке?

2 4

2 ответа:

Решение заключается в создании экземпляра LookAndFeel по умолчанию самостоятельно (что никогда не должно быть сделано в соответствии с Javadocs). Затем вы можете получить пользовательский интерфейс из LaF по умолчанию и применить его к вашей кнопке.

Если протестировать этот код в моем собственном приложении, которое также использует вещество, и он сработал:

LookAndFeel laf = null;
try {
    String lafClassName = UIManager.getSystemLookAndFeelClassName();
    laf = (LookAndFeel) (Class.forName(lafClassName).newInstance());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
}
if (laf != null) {
    laf.initialize();
    button.setUI((ButtonUI) laf.getDefaults().getUI(button));
}

Если вы хотите переключаться между различными субстанциями кожи, вы можете использовать SKIN_PROPERTY.

myButton.setUI((ButtonUI)UIManager.getUI(myButton))?