0

my_holder.getColor()はデフォルトで RED を返すことになっており、これらの条件ステートメントは機能していません。構文が間違っていると思います。

基本的に、クリックしたときにペイントウォッチを強調表示できるようにしたいのですが、スウォッチの色が のものと同じ場合は、スウォッチのColorHolder選択を解除したいと考えています。

import wheels.users.*;
import java.awt.Color;
import java.awt.event.MouseEvent;

public class PaintSwatch extends Ellipse
{
    private ColorHolder _holder; 
    public int _i;

    public PaintSwatch(Color c,ColorHolder holder){
        super(c);
        _holder = holder;
        _i = 1;
    }

    public void mouseClicked(MouseEvent e){
        if (_holder.getColor() != super.getColor()){
            super.setFrameColor(Color.BLACK);
            super.setFrameThickness(3);
            _holder.setColor(super.getColor());
        }

        if (_holder.getColor() == super.getColor()){
            super.setFrameThickness(10);
            super.setFrameColor(Color.WHITE);
            _holder.setColor(Color.RED);
        }
    }
}

ここに私のColorHolderクラスがあります:

import java.awt.Color;

public class ColorHolder implements Colorable
{
    private Color _currentColor;

    public ColorHolder()
    {
        _currentColor = Color.RED;
    }

    public Color getColor(){
        return _currentColor;
    }

    public void setColor(Color c){
        _currentColor = c;
    }
}
4

2 に答える 2

2

equals を使用する以外に、2 つの異なる if の代わりに if else を使用する必要があります。

if (_holder.getColor() != super.getColor()) {
   ...
   _holder.setColor(super.getColor());
}

if (_holder.getColor() == super.getColor()) { 
   ...
}

2 番目の if 条件は常に true と評価されることに注意してください。ホルダーの色がスーパーの色と等しくない場合は、最初の if 条件で設定されます。

if (_holder.getColor().equals(super.getColor())) {
   ... do sth
} else {
   ... do sth else
}

また、ホルダーとスーパーのいずれかが色として null を返さないか、明示的に確認してください。

于 2013-06-22T20:14:30.450 に答える
0

クラス内PaintSwatch置換

if (_holder.getColor() != super.getColor())

if (!_holder.getColor().equals(super.getColor()))
于 2013-06-22T20:15:30.270 に答える