#java #swing #boxlayout #hidpi
#java #качать #boxlayout #hidpi
Вопрос:
Этот простой пользовательский интерфейс Java swing BoxLayout
, по-видимому, приводит к тому, что определенные пиксели не отображаются (что приводит к артефактам / мусору), когда масштабирование моего дисплея установлено на 125% (Windows 10):
import javax.swing.*;
public class Test {
public static void main(String[] args) {
JPanel container = new JPanel();
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
for(int i = 1; i <= 3; i ) panel.add(new JButton("Button " i));
JFrame frame = new JFrame();
container.add(panel);
frame.add(container);
frame.pack();
frame.setVisible(true);
}
}
Результат:
Между кнопками 2 и 3 существует разрыв в один пиксель. Меня не сильно беспокоит сам пробел, но пиксели в этом промежутке (в пределах ширины кнопок) заполнены мусором. На скриншоте это выглядит как смещенная часть кнопки, но в целом это может измениться всякий раз, когда эта область перерисовывается (например, после наведения курсора мыши на кнопку 2), часто из-за недавно перерисованного компонента (часто более очевидного в более сложном приложении). Предположительно, это просто неинициализированные данные из-за какого-то несоответствия размеров, вызванного масштабированием дисплея и определенными значениями положения.
Последний раз тестировался с openjdk-14.0.2. (Предположительно, это может произойти только с тех пор, как JEP 263 добавил поддержку «HiDPI Graphics» в Java 9.)
Я делаю что-то не так? Есть ли способ избежать этой проблемы или обойти ее? Это проблема в BoxLayout
или это более фундаментальная проблема? В принципе, что происходит?
Комментарии:
1. Java 8 здесь. Между кнопками нет промежутка. (Просто говорю)