Java Swing组件在不同的PC上显示不同

Java Swing组件在不同的PC上显示不同,java,swing,Java,Swing,我正在尝试使用java swing创建一个迷你游戏,但我找不到任何解决方案来解决一个问题,即使用相同的代码,应用程序在不同的PC上显示不同。它在1366x768分辨率的屏幕上显示,但在全高清屏幕上延伸。 我尝试过在高分辨率屏幕上改变分辨率,尝试过改变图标/字体大小,但没有成功。 我添加了两个屏幕截图,一个是它的外观,另一个是在高分辨率屏幕上。 请注意,出于某种原因,除了拉伸地图外,高屏幕还会放大地图顶部的工具栏 它应该是什么样子的: 它在高分辨率屏幕上的外观: 要解决这些问题,您需要找到屏幕的

我正在尝试使用java swing创建一个迷你游戏,但我找不到任何解决方案来解决一个问题,即使用相同的代码,应用程序在不同的PC上显示不同。它在1366x768分辨率的屏幕上显示,但在全高清屏幕上延伸。 我尝试过在高分辨率屏幕上改变分辨率,尝试过改变图标/字体大小,但没有成功。 我添加了两个屏幕截图,一个是它的外观,另一个是在高分辨率屏幕上。 请注意,出于某种原因,除了拉伸地图外,高屏幕还会放大地图顶部的工具栏

它应该是什么样子的:

它在高分辨率屏幕上的外观:
要解决这些问题,您需要找到屏幕的宽高比。然后可以相应地缩放图像

如果您总是希望图像是方形的,那么您需要确定可用的宽度或高度是否最小,然后将其缩放以适合


你现在正在做的是把整个屏幕拉伸到合适的位置,而不是把你想要的部分全部放进去。此外,如果可用的屏幕大小较大/较小,则应调整图像大小

我猜您的磁贴在
BorderLayout.CENTER
中占据了一个
GridLayout
,这是磁贴的默认布局和位置。调整此大小以查看具有固定大小的平铺效果,如下图所示。例如,如果将extendedstate()设置为
最大化了这两者,则可能会发生这种情况。您可以在封闭的
JFrame
上尝试
setresizeable(false)
,以避免分离

我不知道如何使窗户从一开始就得到正确的形状

当您打开封闭的
JFrame
时,它“使此
窗口的大小符合其子组件的首选大小和布局。”引用的从组成分幅的图标的
大小中获取其初始大小,但您可以覆盖以指定不同的结果

之前:

之后:


我想我明白你的意思。如果我将框架设置为可调整大小,并将窗口最小化,我可以使其处于正确的形状,但我不知道如何使窗口从一开始就获得正确的形状。按照我编写代码的方式,我不可能每次更改地图时都执行repack()。