Java 用于高分辨率屏幕的JFrame缩放

Java 用于高分辨率屏幕的JFrame缩放,java,swing,jframe,scale,resolution,Java,Swing,Jframe,Scale,Resolution,我有一个大小为1280x800的不可调整大小的Jframe。当然,根据屏幕的分辨率,这个尺寸看起来越来越大,越来越小。(它有一个背景图像)。现在,如果我在4k显示器上试一试,这绝对是不切实际的,因为它太小了。难道没有办法缩放JFrame吗?还是这个问题的解决方案?我想我要做的是编写更大的jFrames,并告诉主类根据解析打开哪个jFrames。我相信有一个更优雅的方法可以做到这一点,因为我想这是一个很多人都会遇到的问题! 真是一场噩梦!请帮帮我! 谢谢实现这一点的一种方法是获取设备的屏幕大小,然

我有一个大小为1280x800的不可调整大小的Jframe。当然,根据屏幕的分辨率,这个尺寸看起来越来越大,越来越小。(它有一个背景图像)。现在,如果我在4k显示器上试一试,这绝对是不切实际的,因为它太小了。难道没有办法缩放JFrame吗?还是这个问题的解决方案?我想我要做的是编写更大的jFrames,并告诉主类根据解析打开哪个jFrames。我相信有一个更优雅的方法可以做到这一点,因为我想这是一个很多人都会遇到的问题! 真是一场噩梦!请帮帮我!
谢谢

实现这一点的一种方法是获取设备的屏幕大小,然后相应地设置JFrame的大小:

Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
double jFrameWidth = screenDimension.width * 0.7;
double jFrameHeight = screenDimension.height * 0.5;
或者,如果您只是想最大化JFrame,您可以使用:

jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);

检测要启动的窗口的分辨率,并将帧缩放到该窗口的百分比。有一个基线尺寸(1280*800),这样它就不会在较小的屏幕上被挤压

例如,我将本地
图形环境
,我将每个相关
图形设备
中的数据拉入我自己编写的数据类中,并在整个项目中使用它,因为它提供了各种各样的东西,如缓冲策略、窗口尺寸等。我在加载应用程序时执行此操作(使用
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
最适合的屏幕大小。然后,在较大的屏幕尺寸上放大JFrame,在较小的屏幕尺寸上缩小JFrame(只要不达到最小尺寸)。你可以用同样的方法缩放你的背景图像。你能给我一个编码参考吗?嗨,如果人们要随机否决这个答案,我会很感激你的评论。是的,你,但你看,这使框架的大小合适,但不是它的内容。所以我的背景图像永远都不合适properly@MarcoEdoardoPalma您应该使用布局管理器和非固定大小来编写JFrame的内容,以便它们能够根据JFrame的大小进行缩放。另请参见此不可调整大小的容器。