Я загрузил и установил последнюю версию раннего доступа Java 9, и был рад найти, что приложение Java Swing в Windows теперь отображает компоненты в правильном размере. Больше не нужно, чтобы мои клиенты с дисплеями HiDPI использовали мое приложение с половиной намеченной ширины и высоты.Как заставить Java 9 использовать изображения с более высоким разрешением на дисплее HiDPI?
Тем не менее, я заметил, что в моем приложении Swing мои собственные значки просто масштабируются, чтобы удвоить ширину и высоту, что заставило их выглядеть неровными.
У меня есть полный набор всех значков как с нормальным размером (например, foobar.png), так и с двойной шириной/высотой (например, [email protected]). Я использую соглашения об именах Apple.
Как я могу получить Java 9, чтобы легко находить и использовать версию изображения с более высоким разрешением, когда она доступна, без необходимости вручную ее кодировать?
Образец кода всегда делает вопрос более ясным, так же как у Java 9 есть класс значков с несколькими разрешениями, которые я мог бы использовать для компиляции и запуска следующего кода?
import javax.swing.*;
public class ScratchSpace {
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("I work in HiDPI!");
// can I replace the following line with some magical new method that automatically loads the same icon at multiple resolutions
// so that Swing chooses the correct one when rendering, depending on the current scale of the current display?
Icon icon = new IconWithMultipleSizes("foobar.png");
JLabel label = new JLabel("I'm a label with an icon.", icon, SwingConstants.LEFT);
frame.setContentPane(label);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
Я думаю, что такой класс должен быть, но я не могу его найти.
До сих пор я нашел класс в Java 9 под названием java.awt.image.MultiResolutionImage, который предполагает, что он делает то, что я хочу. Я все еще ищу информацию о том, как заставить его работать. –