即使在重新调整大小时,如何获得屏幕的中间位置

Poo*_*eek 2 java swing

好的,这类问题包含两部分.

  1. 当我制作一个JFrame并在其上画一些东西时,即使我将宽度设为400,并使其成为当一个物品击中它时(当然允许物品宽度)它会反弹回来.但出于某种原因,它总是离屏幕大约10个像素.有没有办法解决它,或者我只需要通过加/减数字来补偿?

  2. 如何获得EXACT屏幕中心.因此,如果我将JFrame默认值设置为200*200像素,则中心将为100*100.(允许问题1中的问题)但是如果某人调整屏幕大小(是的,我希望他们能够重新调整大小),那么这一点仍然是中心.因此,如果他们全屏显示并且他们的屏幕尺寸是1200*900,那么中心将是600*450.

我希望这很清楚

Mad*_*mer 7

从你所说的声音中,我认为你误解了普通(装饰)框架的尺寸包括什么.

A JFrame由窗口/框架(通常用边框装饰),a组成JRootPane,其中包含JLayeredPane内容窗格JMenuBar和玻璃窗格.

在此输入图像描述

这是您永远不应该覆盖顶级容器paint方法的原因之一,因为您实际上不会在内容/视图区域内进行绘制.

因此,框架的实际"可绘制"区域是width - border.widthxheight - border.height

在此输入图像描述

红线表示框架,蓝色表示内容窗格.

这提出了一个非常重要的问题,框架的中心在哪里?从框架的角度来看,它是100x100,但从内容窗格的角度来看,它是92x81.根据您的需要,取决于您将使用的值.对于定位框架,您将需要使用框架中心点进行绘画,您将希望使用内容窗格.

现在,在屏幕上居中框架的最简单方法是简单地调用Window#setLocationRelativeTo(null),我建议你使用Timr的解决方案;)