【问题标题】:java: How to get the 'screen' dimensions from a Graphics objectjava:如何从图形对象中获取“屏幕”尺寸
【发布时间】:2011-12-29 19:45:19
【问题描述】:

我正在开发一个几何程序,我需要在其中绘制“无限”线。我的班级 Line 有一个方法

public void draw(Graphics2D g){
    //... calculate x1,y1,x2,y2 here ...
    g.draw(new Line2D.Double(x1,y1, x2,y2));
}

我的想法是选择足够大的坐标,使它们远离可见表面。但我不知道,这是我的问题,我怎么知道可见表面角落的坐标? Graphic 的方法 getClip() 听起来不错,但显然它只返回用户之前设置的自定义剪辑。显然我需要在文档中称为“设备剪辑”。

在您建议较大的长度(例如 10000)之前,我在这里并不是指像素大小。我使用变换来缩放和平移等,所以 10000 很可能是可见的。

编辑: 我只是想告诉你我最终做了什么:我为最大屏幕宽度和高度定义了一个相当大的常量(它们可能需要在 10 年内调整),然后我将当前显示转换的倒数应用于这个“屏幕”知道我的“无限”行的必要长度。 IE。问题没有解决,只限于代码中的一个点。

【问题讨论】:

  • 你也在画什么?全屏,还是类似 JPanel 的东西?
  • 一个JPanel。但是这个方法不应该关心这个,它只有 g 可以继续。
  • 我不是 100% 确定,但我认为在这种情况下,您总是相对于顶角的 0,0 进行绘制。视口实际上从未移动过。如果你想在概念上移动的地方做一些事情,你必须在它上面编写代码来自己管理视口
  • 错了。但即使它是真的,左上角 0,0,那如何给我其他角?

标签: java graphics dimensions


【解决方案1】:

怎么样

java.awt.Toolkit.getDefaultToolkit().getScreenSize()

它返回一个具有屏幕大小的 Dimension 对象。

希望这会有所帮助。

【讨论】:

  • 糟糕...刚刚注意到上面关于在窗口中的评论。这可能不会有帮助。
  • 我之前遇到过这个并忽略了它。但现在它实际上启发了我对无限线问题的粗略解决方案。但是我仍然对实际尺寸感兴趣,例如将原点转换为画布中心。
【解决方案2】:

Rectangle bounds = g.getDeviceConfiguration().getBounds()

也许你在追求什么?我不认识自己,但只是浏览文档看起来是一个合理的选择......

【讨论】:

  • 我还没有遇到过,这实际上是一个进步。它似乎给了我以像素为单位的画布尺寸。我想我现在可以提取变换并对其进行逆变换。我会尝试,如果在 Graphic 的坐标系中没有直接的解决方案,我会接受这个答案。
  • @peter:完全有可能有更好的解决方案——这正是我遇到的。恐怕自从我用 Java 完成图形以来已经很久了:(
  • 我刚刚尝试过,不幸的是,当我调整窗口大小时它似乎没有更新。即使我把它变大也不行。这是一种奇怪的方法......
  • @peter:啊,不清楚您是否想要 window 的剪辑 - 该方法将为您提供 device(即屏幕)。
  • 不,这也不是真的,它似乎只给出了 JPanel 的初始大小,接近我的 JFrame 的 setSize 值。我现在尝试了 g.getDeviceConfiguration().getDevice().getDisplayMode().getWidth() 但它也一样。只会报告程序开始时的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 2023-03-17
相关资源
最近更新 更多