【问题标题】:Moving the camera inside a Frame in java在java中的框架内移动相机
【发布时间】:2012-12-01 00:53:22
【问题描述】:

我想知道如何在 java 的框架内移动相机。例如:

frame.moveInsideFrame(pointX,pointY).

【问题讨论】:

  • 什么相机?你试过什么?我们需要更多信息才能真正理解您的问题。
  • 你指的是 java.awt 框架吗?
  • ...什么?我不明白。
  • 如果我有一个窗口,假设为 500 X 500,并且我希望您的视口也为 500 X 500,我将如何将窗口内的视口移动到不同的位置在太空?我没有尝试过,因为我不知道如何在框架内移动屏幕。我认为它会类似于 frame.getRelativeLocation()。基本上,我想在框架内创建一个移动相机。

标签: java camera frame


【解决方案1】:

您必须移动框架中的所有内容。例如:

private void moveInsideFrame(int moveX, int moveY) {
    for (int i = 0; i < listOfObjects.size(); i ++) {
        JComponent current = listOfObjects.get(i);
        current.x -= moveX;
        current.y -= moveY;
    }
}

(这只是示例代码,它不会真正起作用。在屏幕上显示所有组件的ArrayList 并单独移动每个组件。)

或者,如果您只是将它们全部放在框架中(而不是在自定义 JPanel 中覆盖 paintComponent),则使用 frame.getComponents()

【讨论】:

  • 不需要ArrayListframe.getComponents() 可以迭代以节省内存。
  • @Vulcan 好吧,我假设他正在覆盖paintComponent。我想我也会这样写的。
  • 这是有道理的。但是完全有可能制作某种视口来移动到对象而不是在框架内移动对象?
  • @DillonBurton 只是将所有对象移动到框架中。你不能移动框架视图本身。
  • @PicklishDoorknob 好的。我之前刚刚听说过,想知道是否有可能。
【解决方案2】:

您可以将外部框架视为“相机”框架,您可以在其中创建一个“世界”框架。 然后,您可以使用相反的坐标移动您的世界窗口,以模拟相机的移动。

要实现它,请对内框使用绝对定位(即无布局)。 有关绝对定位的更多详细信息,请参阅http://docs.oracle.com/javase/tutorial/uiswing/layout/none.html

【讨论】:

  • 绝对定位是一个非常糟糕的主意。 (我也已经在回答中说过了。)
  • 为什么这么糟糕?我说的是仅绝对定位视口,而不是其中的元素。为什么你说你做不到?
  • 永远不要使用绝对定位,这是非常糟糕的做法。 永远不会。 stackoverflow.com/questions/6592468/…
  • 由于我没有时间尝试在 Java 中测试绝对定位,所以我将放弃这个讨论。
猜你喜欢
  • 2017-09-16
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多