JToggleButton的重构状态以及ButtonGroup的使用

JToggleButton与JButton的不同之处在于,JToggleButton包括一个按下状态,可以在按下弹起之间切换,通常用作开关按钮。

1、重构JToggleButton式样时的几种状态:
自定义JToggleButton式样时,可以想到的状态无非就是正常状态、按下状态以及鼠标悬停状态,那么在重构JToggleButton时,处理鼠标事件监听

addMouseListener(new MouseAdapter() {
    @Override
    public void mouseEntered(MouseEvent e) {
        //当鼠标进入时,鼠标进入状态改为0,并重绘按钮
        isMouseEntered = 0;
        repaint();
        super.mouseEntered(e);
    }
    @Override
    public void mouseExited(MouseEvent e) {
        //鼠标移出
        isMouseEntered = 1;
        repaint();
    }
    @Override
    public void mousePressed(MouseEvent arg0) {
        //鼠标按下
        isMouseEntered = 2;
        repaint();
    }
    @Override
    public void mouseClicked(MouseEvent arg0) {

    }
    @Override
    public void mouseReleased(MouseEvent e) {
        //鼠标释放
        isMouseEntered = 0;
        repaint();
    }

});

之后,通过isMouseEntered标志位处理相应的状态绘制,但此时,要注意到,绘制完状态,为什么看不到JToggleButton的按下状态呢!!
因为丢掉了一个重要状态isSelected(),mousePress状态不能标志选中状态,当鼠标释放时又弹回了正常状态,要看到按下/弹起的开关状态,需要对isSelected()也进行重新绘制

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;

    if (isSelected()) {
        AlphaComposite composite1 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
        g2.setComposite(composite1);
        drawSelectedBackground(g2, this);
    }

    switch(isMouseEntered) {
        case 0:
        ...
        case 1:
        ...
    }
}

至此,JToggleButton的式样算是绘制全了,可以看到完整的一套自定义式样了。

2、给JToggleButton加ButtonGroup,对于多个JToggleButton要同时使用,但当前又只能有一个是选中状态,可以通过给这些关联的JToggleButton加一个分组,让他们处在同一个分组之中,ButtonGroup规定当前分组下的所有元素,同一时刻只能有一个是选中状态。
ButtonGroup可以很方便的控制几个Button的状态,当选中其中一个的时候,其他元素会自动把isSelected置为false,不需要额外的代码控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值