没有执行绘制操作,但是系统输出

时间:2010-12-30 18:23:13

标签: java if-statement paint

我正在开发一个绘制框并用线连接它们的应用程序。每条线都有角(点)。用户可以通过右键单击该行来添加点。然后点得到一个位置。

图表的绘制方法循环遍历所有点并检查它们是否是自定义的(简单;返回(位置!= -1)),当它们必须在该位置上绘制圆形图像时。

现在我真的撕掉了我的听力,因为它在调试模式下执行但不画画!我放了一个系统来检查,这是正常执行的。但如果我放置一个if语句就可以了!在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);
}

}

控制台输出: 一定不行! 一定不行! 一定不行! 一定不行! YEAH! 一定不行! 一定不行! 一定不行! 一定不行! YEAH! ......你明白了

2 个答案:

答案 0 :(得分:0)

也许你需要强行重新绘制屏幕?可能是它确实会读取您的操作,但是它不会显示它。我从来没有使用'Graphics2D',所以我不知道这个方法,但你应该能够轻松找到它。

答案 1 :(得分:0)

可能你的点的x / y值不正确。

在(0,0)处绘制字符串将不会显示字符串,因为drawString期望该点为底部/左侧,而不是顶部/左侧。

另一只手绘制图像使用顶部/左侧,因此可以通过减去8来移动图像。

但正如其他人所指出的那样,确定的唯一方法就是发布SSCCE。