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

时间:2016-06-19 19:31:36

标签: java swing jframe scale resolution

我有一个大小为1280x800的不可调整大小的Jframe。当然,根据屏幕的分辨率,这个尺寸看起来越来越大。 (它有一个背景图片)。现在,如果我尝试这个让我们说一个4k显示器,这将是绝对不切实际的,因为小。还没有办法扩展JFrame吗?或者解决这个问题?我想我会做的是写更大的jFrames并告诉主类根据分辨率打开哪一个。我确信有一种更优雅的方式可以做到这一点,因为我猜这是一个很多人会遇到的问题! 什么样的恶梦!请帮我! 谢谢

2 个答案:

答案 0 :(得分:0)

您可以通过获取设备的屏幕尺寸,然后相应地设置JFrame的大小来实现这一目标:

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

或者,如果您只想最大化JFrame,可以使用:

jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);

答案 1 :(得分:0)

检测您正在启动的窗口的分辨率,并将帧缩放到该窗口的百分比。有一个基线尺寸(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的大小设置为其运行的监视器的大小。您还需要修改您正在使用的背景图片。你可以做更多的事情,但我有目的地保持简单。