0

当我单击 PaintSwatch 时,我希望它们突出显示自己(setFrameThickness 和 setFrameColor)。但是,我想让它一次只能突出显示一个。我包括了它必须满足的 2 个条件,并且布尔部分没有按照我的想法工作,因为我仍然能够突出显示多个 PaintSwatch。

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

您缺少两个 PaintSwatch 之间的交互。您的鼠标事件只会改变所点击的 PaintSwatch 的状态。

但是,您需要调用其他 PaintSwatch 进行相应的更改。您可以通过所有 PaintSwatch 的父对象中的函数直接(然后所有 PaintSwatch 需要相互注册)或使用观察者等来做到这一点。

于 2013-06-23T14:56:44.687 回答
0

当发生鼠标点击时,只有被点击的对象会接收到mouseClicked()调用。您需要以某种方式跟踪当前选择的PaintSwatch并在选择新的时取消选择它PaintSwatch

于 2013-06-23T15:00:07.327 回答