javafx如何比较颜色?

时间:2013-03-12 19:17:32

标签: netbeans javafx

对于学校我们需要制作一款名为记忆的游戏,但我的游戏并不是很好。我已经拥有了所有卡片,他们也可以转身但我不知道你怎么能比较颜色并且如果颜色不是马赫则将卡片转回来或者如果颜色是马赫则让卡片消失。你能帮我吗?这是代码的一小部分:

d = Rectangle {
width: bind 150
height: bind 150
x: bind 500
y: bind 20
arcWidth: 20
arcHeight: 20
fill:  Color.GREEN
stroke: Color.BLACK
strokeWidth: 1.0
onMouseClicked:function(a: MouseEvent)
        {
           if(d.fill == Color.GREEN)
            d.fill = Color1.YELLOW
         else
            d.fill = Color.GREEN
        }
}
 if(Color1.equals("yellow"))
             && (Color2.equals("yellow"))
 {
  d.setVisible(false);
  j.setVisible(false);

 }

1 个答案:

答案 0 :(得分:1)

版本2.X

JavaFX是部分开源(Stack Overflow reference)。在该链接中,我找到equals()Color方法的源代码,版本为 2.X

/**
 * Indicates whether some other object is "equal to" this one.
 * @param obj the reference object with which to compare.
 * @return {@code true} if this object is equal to the {@code obj} argument; {@code false} otherwise.
 */
@Override public boolean equals(Object obj) {
    if (obj == this) return true;
    if (obj instanceof Color) {
        Color other = (Color) obj;
        return red == other.red
            && green == other.green
            && blue == other.blue
            && opacity == other.opacity;
    } else return false;
}

显然,redgreenblueopacity需要相同。

版本1.X

对于 1.X 版本,我只看了编译的类文件,并且有足够的信心说实现与2.X(下面的代码段)相同:

@com.sun.javafx.runtime.annotation.Public
  public boolean equals(java.lang.Object arg0);
  4  invokestatic javafx.lang.Builtins.isSameObject(java.lang.Object, java.lang.Object) : boolean [87]
 15  instanceof javafx.scene.paint.Color [80]
 18  ifeq 121
 22  checkcast javafx.scene.paint.Color [80]
 28  invokevirtual javafx.scene.paint.Color.get$red() : float [45]
 38  invokevirtual javafx.scene.paint.Color.get$red() : float [45]
 50  invokevirtual javafx.scene.paint.Color.get$green() : float [47]
 60  invokevirtual javafx.scene.paint.Color.get$green() : float [47]
 72  invokevirtual javafx.scene.paint.Color.get$blue() : float [48]
 82  invokevirtual javafx.scene.paint.Color.get$blue() : float [48]
 94  invokevirtual javafx.scene.paint.Color.get$opacity() : float [49]
104  invokevirtual javafx.scene.paint.Color.get$opacity() : float [49]

equals()实施从1.X更改为2.X。

你真正的问题

如果Color1Color2确实属于Color类型,则您将它们与String类型的对象进行比较:

if(Color1.equals("yellow")) && (Color2.equals("yellow"))

此处的比较将失败:

if (obj instanceof Color)

因此,equals()方法将始终返回false。您应该将equals()与另一个Color类型的对象一起使用。