好的,这类问题包含两部分。
当我制作一个JFrame
并在其上绘制一些东西时,即使我将宽度设为400,并使其在项目击中时也是如此(当然,允许物品宽度)它反弹回来。但出于某种原因,它总是离屏幕大约10个像素。有没有办法解决它,或者我只是需要通过加/减数字来补偿?
如何获得EXACT屏幕中心。因此,如果我将JFrame
默认设置为200 * 200像素,则中心将为100 * 100。 (允许问题1中的问题)但是如果某人调整屏幕大小(是的,我希望他们能够重新调整大小),那么这一点仍然是中心。因此,如果他们全屏显示,屏幕尺寸为1200 * 900,则中心为600 * 450。
我希望这很清楚
答案 0 :(得分:7)
从您所说的声音来看,我认为您误解了普通(装饰)框架的尺寸包括什么。
JFrame
包含一个窗口/框架(通常用边框修饰),JRootPane
,其中包含JLayeredPane
,其中包含内容窗格JMenuBar
和玻璃窗格。
这是您永远不应该覆盖顶级容器paint
方法的原因之一,因为您实际上不会在内容/视图区域内进行绘制。
因此,框架的实际“可绘制”区域是width - border.width
x height - border.height
红线表示框架,蓝色表示内容窗格。
这提出了一个非常重要的问题,框架的中心在哪里?从框架的角度来看,它是100x100,但从内容窗格的角度来看,它是92x81。根据您的需要,取决于您将使用的值。要定位框架,您需要使用框架中心点进行绘画,您将需要使用内容窗格。
现在,在屏幕上居中框架的最简单方法就是调用Window#setLocationRelativeTo(null)
,否则我会建议您使用Timr的解决方案;)
答案 1 :(得分:3)
这是我用来将JFrame
放在屏幕上的中心,它只是检索显示器的高度和宽度,然后将框架居中
public static void moveToCenterScreen(JFrame frame) {
Toolkit kit = frame.getToolkit();
GraphicsDevice[] gs = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();
Insets in = kit.getScreenInsets(gs[0].getDefaultConfiguration());
Dimension d = kit.getScreenSize();
int max_width = (d.width - in.left - in.right);
int max_height = (d.height - in.top - in.bottom);
frame.setLocation((int) (max_width - frame.getWidth()) / 2, (int) (max_height - frame.getHeight() ) / 2);
}
答案 2 :(得分:2)
你可以使用简单的
int ___ = (Jframe.getWidth())/2
int ___ = (Jframe.getHeight())/2
空白将是您想要在中心点的值。
至于另一个问题,你可能会有一些填充物或者正在移动物品的东西。不确定没有看到它的代码。