package com.javaxyq.ui; import java.awt.Color; import java.awt.event.ActionEvent; import java.util.List; import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JToggleButton; import com.javaxyq.event.EventDelegator; import com.javaxyq.util.UIUtils; import com.javaxyq.widget.Frame; import com.javaxyq.widget.Sprite; /** * �Զ����Button��<br> * ʹ����Ϸ��Դ����ʾ * * @author gdw * @date */ public class ToggleButton extends JToggleButton { private static final long serialVersionUID = -8675673809044869964L; /** * ��ť����ʱ�Ƿ��Զ�������ƫ�� */ private boolean autoOffset = false; public ToggleButton() { } public ToggleButton(Action action) { super(action); } /** * ����һ������4֡ͼƬ��������Ϊ��ť��4��״̬,0-3����Ϊnormal,pressed,rollover,disabled * * @param frames */ public ToggleButton(int width, int height, List<Frame> frames) { setSize(width, height); init(frames); } public ToggleButton(Sprite sprite) { init(sprite); } public void init(List<Frame> frames) { // changed ui //setUI(new CustomButtonUI()); setFont(UIUtils.TEXT_FONT); setForeground(Color.WHITE); setHorizontalTextPosition(JButton.CENTER); setVerticalTextPosition(JButton.CENTER); setHorizontalAlignment(JButton.CENTER); setVerticalAlignment(JButton.CENTER); // changed viewer properties setIgnoreRepaint(true); setBorder(null); // setOpaque(false); setFocusable(false); setContentAreaFilled(false); // set icons try { int frameCount = frames.size(); if (frameCount > 0) { setIcon(new ImageIcon(frames.get(0).getImage())); } if (frameCount > 1) { ImageIcon selectedIcon = new ImageIcon(frames.get(1).getImage()); setPressedIcon(selectedIcon); setSelectedIcon(selectedIcon); } if (frameCount > 2) { setRolloverIcon(new ImageIcon(frames.get(2).getImage())); } if (frameCount > 3) { setDisabledIcon(new ImageIcon(frames.get(3).getImage())); } } catch (Exception e) { System.err.println("occur error while create button !"); e.printStackTrace(); if (frames.size() < 3) autoOffset = true; } } public void init(Sprite sprite) { setSize(sprite.getWidth(), sprite.getHeight()); List<Frame> frames = sprite.getAnimation(0).getFrames(); init(frames); } public boolean isAutoOffset() { return autoOffset; } // ��ײ��� // public boolean contains(int x, int y) { // return super.contains(x, y); // } /** * ��ť����ʱ�Ƿ��Զ�������ƫ�� */ public void setAutoOffset(boolean autoOffset) { this.autoOffset = autoOffset; } @Override public void paintImmediately(int x, int y, int w, int h) { //super.paintImmediately(x, y, w, h); } @Override protected void fireActionPerformed(ActionEvent event) { super.fireActionPerformed(event); EventDelegator.getInstance().delegateEvent(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, getActionCommand())); } // class CustomButtonUI extends BasicButtonUI { // @Override // protected void paintIcon(Graphics g, JComponent c, Rectangle iconRect) { // ToggleButton btn = (ToggleButton) c; // ButtonModel model = btn.getModel(); // if (btn.isAutoOffset() && model.isArmed() && model.isPressed()) { // defaultTextShiftOffset = 1; // down // } else { // defaultTextShiftOffset = 0; // } // setTextShiftOffset(); // super.paintIcon(g, c, iconRect); // } // // protected void paintText(Graphics g, JComponent c, Rectangle textRect, String text) { // AbstractButton b = (AbstractButton) c; // ButtonModel model = b.getModel(); // if (model.isArmed() && model.isPressed()) { // defaultTextShiftOffset = 1; // down // } else { // defaultTextShiftOffset = 0; // } // setTextShiftOffset(); // super.paintText(g, c, textRect, text); // } // // } }