Как предотвратить обрезку краев JCheckBox и JRadioButton при использовании пользовательского интерфейса Swing Windows 10JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как предотвратить обрезку краев JCheckBox и JRadioButton при использовании пользовательского интерфейса Swing Windows 10

Сообщение Anonymous »

При использовании JCheckBox и JRadioButton с пользовательским интерфейсом Windows 10/11* я заметил, что левый и/или нижний край значка компонента часто обрезается, когда компонент упакован.
В качестве простого примера код:

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»