Изменить происхождение координат Graphics2D - PullRequest
0 голосов
/ 20 июня 2019

У меня есть простой симулятор лифта. Класс рисования этого симулятора рисует стену с левой стороны и стену справа - оба являются объектами 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

У меня также есть компонент Listener, который просто реагирует на события изменения размера следующим образом:

@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);
    }
}
...