0

PaintSwatch をクリックすると、それ自体が強調表示されるようにします (setFrameThickness と setFrameColor)。ただし、一度に 1 つだけを強調表示できるようにしたいと考えています。満たす必要がある2つの条件を含めましたが、複数のペイントスウォッチをまだ強調表示できるため、ブール部分が思ったように機能していません。

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

public class PaintSwatch extends Ellipse
{
private ColorHolder _holder; //Swatches setColor of this peer object
private boolean _clicked;

public PaintSwatch(Color c,ColorHolder holder){
    super(c);

    _holder = holder;

    _clicked = false;

}

public void mouseClicked(MouseEvent e){
        if (!_holder.getColor().equals(super.getColor()) && _clicked == false)
        {
         super.setFrameColor(Color.BLACK);
         super.setFrameThickness(3);
         _holder.setColor(super.getColor());
         _clicked=true;

        }

        else if(_holder.getColor().equals(super.getColor()) && _clicked == true)
        {
         super.setFrameThickness(0);
         super.setFrameColor(Color.WHITE);
         _holder.setColor(Color.RED);
         _clicked=false;

        }
    }

}
4

2 に答える 2

0

両方の PaintSwatches 間の相互作用がありません。マウス イベントは、クリックされた PaintSwatch のステータスのみを変更します。

ただし、それに応じて変更するには、他の PaintSwatches を呼び出す必要があります。これは、すべての PaintSwatch の親オブジェクトの関数を介して直接 (すべての PaintSwatch を相互に登録する必要があります)、または Observer などを使用して行うことができます。

于 2013-06-23T14:56:44.687 に答える
0

マウス クリックが発生すると、クリックされたオブジェクトだけがmouseClicked()呼び出しを受け取ります。現在選択されているものを何らかの方法で追跡しPaintSwatch、新しいPaintSwatchものが選択されたときに選択を解除する必要があります。

于 2013-06-23T15:00:07.327 に答える