我有一个大小为1280x800的不可调整大小的Jframe。当然,根据屏幕的分辨率,这个尺寸看起来越来越大。 (它有一个背景图片)。现在,如果我尝试这个让我们说一个4k显示器,这将是绝对不切实际的,因为小。还没有办法扩展JFrame吗?或者解决这个问题?我想我会做的是写更大的jFrames并告诉主类根据分辨率打开哪一个。我确信有一种更优雅的方式可以做到这一点,因为我猜这是一个很多人会遇到的问题! 什么样的恶梦!请帮我! 谢谢
答案 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的大小设置为其运行的监视器的大小。您还需要修改您正在使用的背景图片。你可以做更多的事情,但我有目的地保持简单。