Java: различное поведение JFrame в разных операционных системах ⇐ JAVA
Java: различное поведение JFrame в разных операционных системах
Я программирую JFrame на Java с помощью eclipse, который должен иметь тот же размер, что и экран, на котором он отображается.
Сам кадр разделен на две части — одну слева (4/5 размера экрана), предназначенную для отображения изображения, уменьшенного в соответствии с этой частью кадра, и одну справа (1 /5 размера экрана), который должен отображать текст помимо картинки. Мой код работал и работал безупречно уже много лет. До недавнего времени.
Теперь, после установки последней версии eclipse, она внезапно совершенно сломалась и ведет себя по-разному в разных операционных системах. Хотя он все еще работает как задумано на моем компьютере с Windows 7 на моем компьютере с Windows 11, Jframe внезапно больше не имеет правильного размера, хотя я ничего не менял в коде. То же самое касается и Linux. Еще хуже - теперь вдруг картинки больше не уменьшаются. Вместо того, чтобы видеть в рамке полную картинку с меньшим разрешением, я вижу только части изображения, отображаемые в рамке, в исходном разрешении картинки.
Я уже несколько дней ломаю голову над этим необъяснимым поведением, и мои знания серьезно подошли к концу. Что, черт возьми, вдруг не так?!? Можете ли вы помочь мне исправить это, чтобы все снова работало как задумано?
вот код:
публичный класс ScreenManager { защищенный статический размер screenSize = новый размер(); защищенный статический DisplayImage comp = новый DisplayImage(); ошибка частного статического файла = новый файл("error.jpg"); public static void buildFrame() { screenSize.setSize(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getWidth(), GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getHeight()); Рамка JFrame = TextDisplay.displayText(comp, screenSize); ЗагрузитьДисплей(""); //Введите здесь путь к файлу } protected static void loadDisplay(File imageFile) выдает IOException { Изображение изображения = ноль; если (imageFile.exists()) { if(ImageIO.read(imageFile)!= null) { изображение = DisplayImage.displayImage(imageFile, screenSize); } еще { изображение = DisplayImage.displayImage(ошибка, размер экрана); } } еще { изображение = DisplayImage.displayImage(ошибка, размер экрана); } comp.setImage(изображение); } } публичный класс DisplayImage расширяет JComponent { частный статический окончательный длинный сериалVersionUID = 2613775805584208452L; личное статическое изображение; изображение; public static Image displayImage(File f, Dimension screenSize) выдает IOException { BufferedImage img = ImageIO.read(f); Изображение затемнено; двойная ширина = screenSize.getWidth()*0,75; двойной z1 = (img.getWidth()/ширина); двойной z2 = (img.getHeight()/screenSize.getHeight()); if (img.getHeight()/z1
Я программирую JFrame на Java с помощью eclipse, который должен иметь тот же размер, что и экран, на котором он отображается.
Сам кадр разделен на две части — одну слева (4/5 размера экрана), предназначенную для отображения изображения, уменьшенного в соответствии с этой частью кадра, и одну справа (1 /5 размера экрана), который должен отображать текст помимо картинки. Мой код работал и работал безупречно уже много лет. До недавнего времени.
Теперь, после установки последней версии eclipse, она внезапно совершенно сломалась и ведет себя по-разному в разных операционных системах. Хотя он все еще работает как задумано на моем компьютере с Windows 7 на моем компьютере с Windows 11, Jframe внезапно больше не имеет правильного размера, хотя я ничего не менял в коде. То же самое касается и Linux. Еще хуже - теперь вдруг картинки больше не уменьшаются. Вместо того, чтобы видеть в рамке полную картинку с меньшим разрешением, я вижу только части изображения, отображаемые в рамке, в исходном разрешении картинки.
Я уже несколько дней ломаю голову над этим необъяснимым поведением, и мои знания серьезно подошли к концу. Что, черт возьми, вдруг не так?!? Можете ли вы помочь мне исправить это, чтобы все снова работало как задумано?
вот код:
публичный класс ScreenManager { защищенный статический размер screenSize = новый размер(); защищенный статический DisplayImage comp = новый DisplayImage(); ошибка частного статического файла = новый файл("error.jpg"); public static void buildFrame() { screenSize.setSize(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getWidth(), GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getHeight()); Рамка JFrame = TextDisplay.displayText(comp, screenSize); ЗагрузитьДисплей(""); //Введите здесь путь к файлу } protected static void loadDisplay(File imageFile) выдает IOException { Изображение изображения = ноль; если (imageFile.exists()) { if(ImageIO.read(imageFile)!= null) { изображение = DisplayImage.displayImage(imageFile, screenSize); } еще { изображение = DisplayImage.displayImage(ошибка, размер экрана); } } еще { изображение = DisplayImage.displayImage(ошибка, размер экрана); } comp.setImage(изображение); } } публичный класс DisplayImage расширяет JComponent { частный статический окончательный длинный сериалVersionUID = 2613775805584208452L; личное статическое изображение; изображение; public static Image displayImage(File f, Dimension screenSize) выдает IOException { BufferedImage img = ImageIO.read(f); Изображение затемнено; двойная ширина = screenSize.getWidth()*0,75; двойной z1 = (img.getWidth()/ширина); двойной z2 = (img.getHeight()/screenSize.getHeight()); if (img.getHeight()/z1
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение