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