В качестве простого примера код:
Код: Выделить всё
import java.awt.*;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
} catch( InstantiationException | ClassNotFoundException | UnsupportedLookAndFeelException |
IllegalAccessException e ) { /* ignore */ }
SwingUtilities.invokeLater( Main::init );
}
static void init() {
JFrame jf = new JFrame("Demo");
Container c = jf.getContentPane();
c.setLayout( new BoxLayout( c, BoxLayout.Y_AXIS ) );
c.add( new JCheckBox( "Option 1" ) );
c.add( new JCheckBox( "Option 2" ) );
JPanel jp = new JPanel();
jp.setLayout( new BoxLayout( jp, BoxLayout.X_AXIS ) );
jp.add( new JCheckBox( "Option 3" ) );
jp.add( new JRadioButton( "Option 4" ) );
jp.add( Box.createHorizontalGlue() );
jp.add( new JRadioButton( "Option 5" ) );
c.add( jp );
jf.setSize( 500, 250 );
jf.setVisible(true);
jf.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
}

в моей системе Windows 11. Как можно видеть, у многих значков кнопок отсутствует левый/нижний край.
Проблема возникает только для Windows L&F (она не возникает для L&F по умолчанию или при использовании Mac L&F, например). Он сохраняется во многих LayoutManager.
Похоже, это связано с масштабированием пользовательского интерфейса, поскольку добавление -Dsun.java2d.uiScale=1 в Параметры виртуальной машины для отключения масштабирования пользовательского интерфейса устраняют проблему.
Учитывая все это, я на 98 % уверен, что это ошибка. Мой вопрос: есть ли простой способ обойти эту проблему? Например, исправив L&F или изменив пространство значков на несколько пикселей?
Примечания:
* com.sun.java.swing.plaf.windows.WindowsLookAndFeel
Подробнее здесь: https://stackoverflow.com/questions/788 ... ng-the-swi