Nimbus Look And Feel JAVA - изменение глобального размера компонентов - PullRequest
2 голосов
/ 03 апреля 2012

Я искал, можно ли изменить глобальный размер всех компонентов в Nimbus Look and Feel.

Существует учебник для изменения размера компонента; но не для всех компонентов.

Я нашел что-то вроде этого: http://www.jasperpotts.com/blog/2007/12/nimbus-large-small-mini-components/

6 ноября 2008 г. в 11:29 Извините, Мэтт, глобальных настроек для размер, это опять то, что мы могли бы подумать о добавлении, как кажется разумно.

но этот пост несколько лет назад, и, возможно, что-то изменилось. Есть идеи?

Спасибо.

Ответы [ 3 ]

1 голос
/ 26 ноября 2015

Это можно сделать так:

  UIManager.setLookAndFeel(new NimbusLookAndFeel());

  final SynthStyleFactory styleFactory = SynthLookAndFeel.getStyleFactory();
  SynthLookAndFeel.setStyleFactory(new SynthStyleFactory() {
    @Override
    public SynthStyle getStyle(JComponent c, Region id) {
      c.putClientProperty("JComponent.sizeVariant", "large");
      return styleFactory.getStyle(c, id);
    }
  });
1 голос
/ 25 марта 2017

Приведенный ниже ответ является расширением предыдущего ответа @Stijn с изменением в подходе инициализации, как рекомендовано в документе.Цитирование ссылок nimbuslaf и Swing Tutorials - size

Version Note : Не устанавливайте внешний вид Nimbusявно вызывая метод UIManager.setLookAndFeel, потому что не все версии или реализации Java SE 6 поддерживают Nimbus.Кроме того, местоположение пакета Nimbus изменилось между выпусками JDK 6 Update 10 и JDK 7.Итерация по всем установленным реализациям внешнего вида является более надежным подходом, потому что если Nimbus недоступен, используется внешний вид по умолчанию.

try {
    for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
    if ("Nimbus".equals(info.getName())) {
        UIManager.setLookAndFeel(info.getClassName());
        try {
            Constructor c = Class.forName("MyStyleFactory").getConstructor(String.class);
            c.newInstance("small"); // regular, mini, small or large
        } catch (ExceptionInInitializerError eiie){
        //
        } catch (LinkageError le){
        //
        } catch (ClassNotFoundException cnfe){
        //
        }
        break;
    }
    }
} catch (Exception e) {
    // If Nimbus is not available, you can set the GUI to another look and feel.
}

Файл: MyStyleFactory.java

public class MyStyleFactory extends SynthStyleFactory {
    protected static String variant = "regular";

    final SynthStyleFactory styleFactory = SynthLookAndFeel.getStyleFactory();

    static {
        SynthLookAndFeel.setStyleFactory(new MyStyleFactory(variant));
    }

    public MyStyleFactory(String variant) {
        if (variant.equals("regular") || variant.equals("mini")
                || variant.equals("small") || variant.equals("large"))
            MyStyleFactory.variant = variant;
    }

    @Override
    public SynthStyle getStyle(JComponent c, Region id) {
        c.putClientProperty("JComponent.sizeVariant", variant);
        return styleFactory.getStyle(c, id);
    }
}
1 голос
/ 03 апреля 2012

Я не думаю, что есть какой-то конкретный способ достичь этого. Проект JXLayer имеет реализацию для преобразования всего пользовательского интерфейса в различные масштабы. Это может быть применено к любому внешнему виду.Вы можете проверить это демо

...