Масштабирование JFrame для экранов высокого разрешения

У меня размер Jframe размером не более 1280x800. Конечно, этот размер кажется больше и меньше в зависимости от разрешения экрана. (Имеет фоновое изображение). Теперь, если я попробую это, скажем, монитор 4k, это было бы абсолютно непрактично, потому что для малого. Разве нет способа масштабировать JFrame? Или решение этой проблемы? Я подумал, что сделаю больше jFrames и скажу основному классу, какой открыть в соответствии с резолюцией. Я уверен, что есть намного более изящный способ сделать это, так как я думаю, что это проблема, с которой многие столкнулись бы! Какой кошмар! Пожалуйста, помогите мне! Спасибо

2 ответа

Определите разрешение окна, на котором вы запускаете, и масштабируйте фрейм до процента от этого окна. Имейте базовый размер (1280 * 800), чтобы он не был слишком сжат на маленьких экранах.

В качестве примера я вытащил местный GraphicsEnvironmentЯ вытащил данные от каждого соответствующего GraphicsDevice в класс данных, который я написал сам, и я использую его в своем проекте, поскольку он дает мне все виды вещей, таких как стратегии буфера, размеры окна и так далее. Я делаю это, когда приложение загружается (используя SplashScreen), который дает мне контроль над всем процессом.

Я думаю, это настолько элегантно, насколько это возможно.


РЕДАКТИРОВАТЬ

Редактирование в некоторых примерах псевдокода, чтобы дать представление о том, к чему я клоню. Я пишу в основном на Java, но я не делаю этого в IDE, поэтому он не обязательно будет готов к компиляции:

public void scaleWindowDimensions(JFrame frame, GraphicsDevice gd) {
    Rectangle bounds = gd.getDefaultConfiguration().getBounds();
    int screenX = (int) bounds.getWidth();
    int screenY = (int) bounds.getHeight();
    // substitute this for however you're setting the size of the JFrame; this is simply how I sometimes do it
    frame.getContentPane().setPreferredSize(new Dimension(screenX, screenY));
}

Это очень быстрый пример, который устанавливает размер вашего JFrame в соответствии с размером монитора, на котором он работает. Вам также нужно изменить фоновое изображение, которое вы используете. С этим можно сделать гораздо больше, но я намеренно упрощаю.

Один из способов добиться этого - получить размер экрана устройства, а затем установить соответствующий размер JFrame:

Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
double jFrameWidth = screenDimension.width * 0.7;
double jFrameHeight = screenDimension.height * 0.5;

Или, если вы просто хотите максимизировать JFrame, вы можете использовать:

jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
Другие вопросы по тегам