更改Graphics2D坐标的原点

时间:2019-06-20 08:00:05

标签: swing graphics2d

我有一个简单的电梯模拟器。该模拟器的绘画类在左侧绘制一堵墙,在右侧绘制一堵墙-都是Line2D对象。中心是代表机舱的矩形。

我的成员变量是:

private PaintableElevator paintableObject;
private Line2D wallLeftSide = new Line2D.Double();
private Line2D wallRightSide = new Line2D.Double();
private Rectangle2D elevator = new Rectangle2D.Double();

paintableObject给出按比例绘制位置的信息。例如,如果说机舱的高度为0.1,则其在面板上的高度为:this.getHeight * 0.1

我还有一个组件侦听器,它对rezize Events的反应如下:

@Override
public void componentResized (ComponentEvent e)
{
wallLeftSide.setLine(new Point2D.Double(0, changeYCoordsOrigin(getHeight() * paintableObject.getTotalHeight())), new Point2D.Double(0, getWidth()));

wallRightSide.setLine(new Point2D.Double(getWidth(), changeYCoordsOrigin(getHeight() * paintableObject.getTotalHeight())), new Point2D.Double(getWidth(), getHeight()));

elevator.setRect(0, changeYCoordsOrigin(getHeight() * paintableObject.getHeightInShaft()), getWidth(), paintableObject.getCabinHeight() * getHeight() *-1);
}

我的问题是Graphics 2D将其坐标的原点设置在左上角。我希望它位于按钮的左侧。那就是为什么我使用我的方法changeYCoordOrigin()

public double changeYCoordsOrigin (double coord)
{
   return getHeight() - coord;
}

我希望我可以通过计算坐标减去当前高度来转换坐标。那行得通。但是,当我想为矩形设置负高度时,我的组件什么也不显示。

但这非常重要,因为我想通过以下代码驾驶我的小木屋:

@Override
public void setHeigth (double height)
{
elevator.setRect(0, getHeight() * height, getWidth(), paintableObject.getCabinHeight());
repaint();
}

当只是不使用changeYCoordOrigin并使用正高度时,我想乘电梯时电梯会驶下。因此,更改坐标原点或对其进行模拟非常重要。

我的绘画方法只是绘画那些对象:

@Override
public void paint (Graphics g)
{
   if (g instanceof Graphics2D)
   {
       Graphics2D g2 = (Graphics2D) g;
       g2.draw(wallLeftSide);
       g2.draw(wallRightSide);
       g2.setBackground(Color.gray);
       g2.draw(elevator);
    }
}

0 个答案:

没有答案