- Я использую FlatLaf в качестве темы.
- Я использую -Dsun.java2d.uiScale=2 для тестирования, но приложение должно поддерживать любой DPI.
- Я использую виджеты для создания форм, диалоговых окон и панелей, они должны быть соответствующим образом масштабированы.
Я также показываю панели в менеджерах макетов и графику во внутренних фреймах.< /li>
Я хочу создать графический интерфейс, сопоставимый с графическим интерфейсом IntelliJ IDEA или веб-приложения, в которых виджеты «читабельны», а разделители и размеры перемещаются по пикселям устройства, а не по «логическим пикселям».
Я знаю, как сделать изображение пиксельным, настраиваю Transform во время перерисовки, но я не могу «упаковать» (внутренний) кадр в изображение, если изображение имеет нечетные размеры!
Кто-нибудь знает, как это сделать? добиться этого с наименьшими усилиями (т. е. не нужно создавать целые платформы)?

SSCCE:
import java.awt.*;
import javax.swing.*;
import java.awt.image.*;
import com.formdev.flatlaf.*;
public final class Scratch extends JDesktopPane {
public static void main(String... args) {
SwingUtilities.invokeLater(() -> {
FlatLaf.setup(new FlatDarkLaf());
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setContentPane(new Scratch());
f.setSize(600, 600);
f.setVisible(true);
});
}
public Scratch() {
add(new MyInternalFrame());
}
private static class MyInternalFrame extends JInternalFrame {
public MyInternalFrame() {
setResizable(true);
setContentPane(new Document());
setSize(512, 512);
setVisible(true);
}
}
private static class Document extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// Create custom image to curcumvent any shenanigans with the Panel's g.
BufferedImage image = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics(); // forgot to dispose kek
g2.drawOval(0, 0, getWidth() - 1, getHeight() - 1);
g2.drawString(getWidth() + "×" + getHeight(), 4, getHeight() - 4);
g.drawImage(image, 0, 0, null);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... d-graphics
Мобильная версия