【问题标题】:How to get the EXACT middle of a screen, even when re-sized即使重新调整大小,如何获得屏幕的精确中间
【发布时间】:2012-11-07 13:51:57
【问题描述】:

好的,这个问题有两部分。

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

  2. 如何获得精确的屏幕中心。因此,如果我创建一个默认为 200*200 像素的JFrame,那么中心将为 100*100。 (考虑到问题 1 中的问题)但是如果有人调整屏幕大小(是的,我希望他们能够重新调整屏幕大小),那么该点仍然是中心。因此,如果他们将其设为全屏并且屏幕尺寸为 1200*900,那么中心将为 600*450。

我希望这足够清楚

【问题讨论】:

  • 屏幕尺寸总是均匀的。你不能得到确切的中心点。哈哈
  • 我想我遗漏了一些东西 - 但你为什么不能只执行 getWidth()/2 getHeight()/2 来找到中心?
  • 嗯,这让我觉得自己很愚蠢......哈哈
  • 但是第二点信息是,为什么我的项目不应该出现在屏幕上? (如问题1)
  • 这可能是因为 JFrame 大小包括菜单和不同的装饰器,即您无法绘制任何内容的区域。不确定宽度部分,但对于高度肯定是这样。更好的做法是创建一个绘图区,然后在上面画出你想要的任何东西。然后把它放在你的框架上。那你就不会有这种麻烦了。

标签: java swing


【解决方案1】:

从您所说的声音来看,我认为您误解了普通(装饰)框架的尺寸。

JFrame 由一个窗口/框架(通常用边框装饰)、一个JRootPane(其中包含一个包含内容窗格的JLayeredPane)、JMenuBar 和玻璃窗格组成。

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

因此,帧的实际“可绘制”区域是 width - border.width x height - border.height

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

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

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

【讨论】:

    【解决方案2】:

    这是我用来在屏幕上居中 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);
    }
    

    【讨论】:

      【解决方案3】:

      你可以使用一些简单的东西

      int ___ = (Jframe.getWidth())/2
      int ___ = (Jframe.getHeight())/2
      

      空白将是您希望位于中心点的值。

      至于另一个问题,您可能有一些填充或移动项目的东西。不看代码就不确定。

      【讨论】:

      • 除非框架未装饰(未指定),否则框架的边框会嵌入到框架的边界中(因此实际内容区域小于框架的宽度/高度)
      猜你喜欢
      • 2019-06-06
      • 2016-07-14
      • 2012-10-20
      • 1970-01-01
      • 2023-01-04
      • 2015-08-11
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      相关资源
      最近更新 更多