我试图用不同的颜色在画布上画点。基本上,当前点为蓝色,点在绿色当前点之前绘制,点在当前点之后绘制为红色。请参阅代码
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);
}
}
}
请帮帮我。
答案 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而不是列表。例如,TreeSet
或HashSet
将能够远远地检查大型集合中的现有条目(树的O(log n)和散列桶的O(1))而不是迭代在列表上(O(n) - 线性时间)。
private Set<Point> oldpoints = new HashSet<Point>();