根据画布上的位置((x,y)坐标)绘制不同颜色的SWT点

时间:2017-09-08 09:21:42

标签: java canvas point graphics2d

我试图用不同的颜色在画布上画点。基本上,当前点为蓝色,点在绿色当前点之前绘制,点在当前点之后绘制为红色。请参阅代码

private void setElemColor(GC g, int pos) {
    int currentPoint = messtisch.getPointPos(); //current point, number
    if (pos > currentPoint) {
        g.setForeground(cRed);
    } else if (pos == currentPoint) {
        g.setForeground(cBlue);
    } else if (pos < currentPoint) {
        g.setForeground(cGreen);
    }
} 

增加理解力。这很完美。但我试图使用Point代替Int来做同样的事情而不是让逻辑正确。如在

private void setPointColor(GC g, Point cpoint) {
    if (cpoint.equals(currentPoint)) { // the current point itself
        g.setForeground(cBlue);
    } else if (!cpoint.equals(currentPoint)) {
        if (cpoint.x > currentPoint.x || cpoint.y > currentPoint.y) {
            g.setForeground(cRed);
        } else {
            g.setForeground(cGreen);
        }      
    }
}

请帮帮我。

2 个答案:

答案 0 :(得分:0)

我是通过使用新的ArrayList并将点保存到currentPoint来实现的。然后用绿色绘制它们作为旧点。这是我的代码示例。

private ArrayList<Point> oldpoints = new ArrayList<Point>();  

private void setPointColor(GC g, Point cpoint) {
    if (oldpoints.contains(cpoint)) {
        g.setForeground(cGreen);
    } else if (!oldpoints.contains(cpoint)) {
        g.setForeground(cRed);
    }

    if (cpoint.equals(currentPoint)) {
         g.setForeground(cBlue);
         oldpoints.add(cpoint);
    } 
}

请建议其他方法,因为这个方法效率低且不够逻辑。提前感谢你。

答案 1 :(得分:0)

我认为您的解决方案是合理的,但请考虑使用Set而不是列表。例如,TreeSetHashSet将能够远远地检查大型集合中的现有条目(树的O(log n)和散列桶的O(1))而不是迭代在列表上(O(n) - 线性时间)。

private Set<Point> oldpoints = new HashSet<Point>();