为ColorButton增加颜色更改事件

为使ColorButton组件更易于使用,可考虑增加一个颜色更改事件,当按钮颜色改变时,将触发颜色更改事件。这也算是Observer设计模式的一个应用吧。

具体方法如下:

1定义事件类ColorChangedEvent

public class ColorChangedEvent extends EventObject {

 

    private RGB currentRgb = null;//保存当前的颜色RGB

 

    public ColorChangedEvent(Object source, RGB rgb) {

       super(source);

       this.currentRgb = rgb;

    }

   

    public RGB getRgb() {

       return currentRgb;

    }

   

    public String getHexColor() {

       return rgbToHex(currentRgb);

    }

}

    2定义监听器类ColorChangedListener

public interface ColorChangedListener {

 

    public void colorChanged(ColorChangedEvent event);

}

    3ColorButton中增加保存监听器的List

public class ColorButton {

    private List listeners = new ArrayList();

    private Button button;

    private RGB currentRgb; //保存按钮当前的颜色RGB

 

    public void addColorChangedListener(ColorChangedListeners arg0) {

       listeners.add(arg0);

    }

   

    public void removeColorChangedListener(ColorChangedListeners arg0) {

       listeners.remove(arg0);

    }

    ...

}

       4在按钮当前颜色改变时,更新当前颜色RGB,并触发监听器调用colorChanged方法

public class ColorButton {

    ...

void setImage(Image arg0, Color background, Color foreground) {

       drawImage(arg0, background, foreground);

       Image img = button.getImage();

       if(img != null) {

           img.dispose();

       }

       button.setImage(arg0);

       if(currentRgb == null || !currentRgb.equals(background.getRGB())) {

           currentRgb = background.getRGB();

           notifyObservers();

       }

    }

 

private void notifyObservers() {

       int size = listeners.size();

       for(int i=0; i<size; i++) {

    ColorChangedListener listener = (ColorChangedListener)listeners.get(i);

       ColorChangedEvent event = new ColorChangedEvent(this, currentRgb);

       listener.colorChanged(event);

       }

    }

    ...

}

 

控件可按如下方法来使用ColorChangedListener

colorBtn.addColorChangedListener(new ColorChangedListener() {

           @Override

           public void colorChanged(ColorChangedEvent event) {

              ColorButton cb = (ColorButton)event.getSource();

              RGB rgb = event.getRgb();

              ...

           }

    });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值