Следующий подход не работает для меня.Я не знаю, связано ли это с тем, что я использую Nimbus L & F, или, может быть, это потому, что я не перерисовываю компоненты должным образом после факта, или, может быть, это потому, что мое приложение является Netbeans SingleFrameApplication (мальчик, жалею ли я об этом решении) или, может быть, я упустил что-то очевидное.Я прочитал пару десятков сообщений на эту тему, и я экспериментировал с множеством различных подходов, но я не нашел ничего, что могло бы решить эту задачу.
Я хотел бы, чтобы изменения размера шрифта применялись к любым компонентамуже созданный, а также любой, созданный впоследствии (например, новые диалоги и т. д.).
(я планирую сохранить размер шрифта в свойствах приложения, чтобы следующий экземпляр запускался с выбранным размером шрифтаЯ также хотел бы реализовать темы - например, для пользователей со слабым зрением - поэтому, может быть, есть общий лучший подход.)
public static void adjustGlobalFontSize(Float percentChange) {
Enumeration keySet = UIManager.getDefaults().keys();
while (keySet.hasMoreElements()) {
Object key = keySet.nextElement();
Object value = UIManager.get(key);
if (value instanceof Font) {
Font f = (Font)value;
Float sizef = f.getSize2D() * percentChange;
int size = Math.round(sizef);
FontUIResource resf = new FontUIResource(f.getName(), f.getStyle(), size);
UIManager.put(key, resf);
}
}
SwingUtilities.updateComponentTreeUI(MyApp.getApplication().getMainFrame());
}
РЕДАКТИРОВАТЬ 1: я переключился с Nimbus LAF на GTK LAF, как предлагается в комментариях.Я протестировал как приведенный выше код, так и код, предложенный в этом вопросе (который по сути идентичен).
В обоих случаях шрифты не меняются, как я ожидал.Несколько выбранных шрифтов в нескольких элементах управления изменены, но они изменяются очень странным образом - например, элементы в списке со списком увеличиваются только при наведении на них курсора.
Таким образом, проблема не связанапросто в Nimbus LAF.На самом деле, может быть, GTK хуже ...
Для справки, вот вывод кода в вопросе, связанном выше.
Menu.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
ScrollPane.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
SliderThumb.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
ColorChooser.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
PopupMenu.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
Panel.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
Table.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
DesktopIcon.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
ComboBox.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
FormattedTextField.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
RadioButton.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
InternalFrame.titleFont : java.awt.Font[family=DejaVu Sans,name=DejaVu Sans,style=bold,size=12]
Tree.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
Button.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
PopupMenuSeparator.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
TextArea.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
InternalFrameTitlePane.font :javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
ArrowButton.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
Viewport.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
ScrollBarThumb.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
EditorPane.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
ScrollBarTrack.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
ScrollBar.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
ProgressBar.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
FileChooser.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
ToggleButton.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
ToolBar.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
MenuItem.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
defaultFont : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
RootPane.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
TextPane.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
Slider.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
MenuBar.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
List.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
CheckBoxMenuItem.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
SplitPane.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
Separator.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
Spinner.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
ToolTip.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
PasswordField.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
TextField.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
TabbedPane.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
OptionPane.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
TitledBorder.font : java.awt.Font[family=DejaVu Sans,name=DejaVu Sans,style=bold,size=12]
Label.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
SliderTrack.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
TableHeader.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
RadioButtonMenuItem.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
CheckBox.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
InternalFrame.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
DesktopPane.font : javax.swing.plaf.FontUIResource[family=DejaVu Sans,name=DejaVu Sans,style=plain,size=12]
РЕДАКТИРОВАТЬ 2: Дополнительная информация: Если я неНе пытайтесь внести изменения во время выполнения, но вместо этого вызовите метод при запуске приложения до создания каких-либо элементов графического интерфейса, у меня есть некоторая мера успеха.Большинство шрифтов масштабируются по желанию.Основными исключениями являются кнопки, переключатели и текстовые области.Это странно, потому что все они перечислены в обновленном коде выше.Другие компоненты, такие как ComboBoxes, JLables и многие другие, получают обновленные размеры шрифтов.
В качестве первого шага, я думаю, мне следует сосредоточиться на том, чтобы все работало таким образом (т.е. менялось только до запуска).Есть идеи, почему не все шрифты обновляются?