Операция рисования не выполняется, но система выполняет - PullRequest
0 голосов
/ 30 декабря 2010

Я работаю над приложением, которое рисует прямоугольники и соединяет их линиями. Каждая строка имеет углы (точки). Пользователь может добавить точки, щелкнув правой кнопкой мыши по строке. Затем точка получает набор местоположений.

Метод рисования диаграммы перебирает все точки и проверяет, являются ли они пользовательскими (простыми; return (location! = -1)), когда они есть, он должен нарисовать круговое изображение в этом месте.

Теперь я действительно вырываю слух, потому что он работает в режиме отладки, но не рисую! Я установил систему для проверки, и она выполняется как обычно. Но если утверждение работает, если я размещаю! знак перед оператором if. Я действительно не могу найти проблему.

Метод краски:

public void paint(Graphics2D g) {
    g.setColor(Color.RED);//_lineColor);
    g.setStroke(new BasicStroke(DEFAULT_LINE_SIZE));

    for(Line2D line : _lines) {
        g.draw(line);
    }

    if(_isHover) {
        for(ConnectionDot dot : _connectionDots) {
            if(dot.isUserDot()) {
                System.out.println("YEAH!!!");
                //TODO: dot hover?
                g.drawImage(_icoConnectionNor.getImage(), dot.getX()-8, dot.getY()-8, null);

                //g.drawString("What?", dot.getX(), dot.getY());
            } else {
                System.out.println("Hell No!");

                g.drawString("What?", dot.getX(), dot.getY());
            }
        }
    }
}

Класс Dot:

public class ConnectionDot {
//...
private int _userDotQueueLoc;

/**
 * Create new dot.
 *
 * @param gridController reference to the grid controller.
 * @param grid Grid position of the dot.
 */
public ConnectionDot(GridController gridController, Grid grid){
    _gridController = gridController;
    _gridPos = grid;
    _userDotQueueLoc = -1;
}

/**
 * Create new user dot.
 *
 * @param gridController reference to the grid controller.
 * @param grid Grid position of the dot.
 * @param userDotLocation Location of user dot.
 */
public ConnectionDot(GridController gridController, Grid grid, int userDotLocation){
    this(gridController, grid);
    _userDotQueueLoc = userDotLocation;
}

/**
 * Returns true if the dot is custom.
 *
 * @return Flag.
 */
public boolean isUserDot(){
    return (_userDotQueueLoc != -1);
}
*

} * 1013

Консольный вывод: Конечно нет! Конечно нет! Конечно нет! Конечно нет! ДА УЖ!!! Конечно нет! Конечно нет! Конечно нет! Конечно нет! ДА УЖ!!! ... вы получаете точку

Ответы [ 2 ]

0 голосов
/ 30 декабря 2010

Возможно, ваши значения точки x / y неверны.

При рисовании строки в (0, 0) строка не будет отображаться, поскольку drawString ожидает, что точка будет нижней / левой, а не верхней /left.

С другой стороны, при рисовании изображения используется верх / лев, так что, возможно, вычитая 8, вы перемещаете изображение с панели.

Но, как другие указали, единственный способзнать наверняка - значит опубликовать SSCCE.

0 голосов
/ 30 декабря 2010

Может быть, вам нужно принудительно перекрасить экран?Возможно, он читает ваши действия, но не отображает их.Я никогда не работал с Graphics2D, поэтому я не знаю, как это сделать, но вы должны найти его легко.

...