⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buttonui.java

📁 定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而
💻 JAVA
字号:
/*
 * Created on Feb 27, 2005
 */
package org.flexdock.plaf.theme;

import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.FocusEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.AbstractButton;
import javax.swing.Action;
import javax.swing.ButtonModel;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.border.Border;
import javax.swing.plaf.basic.BasicButtonListener;
import javax.swing.plaf.basic.BasicButtonUI;

import org.flexdock.plaf.IFlexViewComponentUI;
import org.flexdock.plaf.PropertySet;
import org.flexdock.plaf.icons.IconResource;
import org.flexdock.view.Button;
import org.flexdock.view.Titlebar;

/**
 * @author Christopher Butler
 */
public class ButtonUI extends BasicButtonUI implements IFlexViewComponentUI {
	public static final String BORDER = "border";
	public static final String BORDER_HOVER = "border.hover";
	public static final String BORDER_ACTIVE = "border.active";
	public static final String BORDER_ACTIVE_HOVER = "border.active.hover";
	public static final String BORDER_PRESSED = "border.pressed";
	
	protected PropertySet creationParameters;
	protected Border borderDefault;
	protected Border borderDefaultHover;
	protected Border borderActive;
	protected Border borderActiveHover;
	protected Border borderPressed;
	
	public void paint(Graphics g, JComponent c) {
		AbstractButton b = (AbstractButton) c;
		ButtonModel model = b.getModel();
		updateTooltip(b);
		
		boolean active = isParentActive(b);
		boolean pressed = isPressed(b);
		boolean hover = pressed || model.isRollover();

		paintBackground(g, b, active, hover, pressed);
		paintIcon(g, b);
		paintBorder(g, b);
	}
	
	protected void paintBackground(Graphics g, AbstractButton b, boolean active, boolean hover, boolean pressed) {
		// do nothing
	}

	protected void paintBorder(Graphics g, AbstractButton b) {
		Border border = getBorder(b);
		if(border!=null)
			border.paintBorder(b, g, 0, 0, b.getWidth(), b.getHeight());
	}
	
	protected Border getBorder(AbstractButton button) {
		if(isPressed(button))
			return getPressedBorder(button);
		
		boolean active = isParentActive(button);
		if(button.getModel().isRollover())
			return getHoverBorder(button, active);
		
		return getDefaultBorder(button, active);
	}

	protected Border getPressedBorder(AbstractButton button) {
		Border border = borderPressed;
		if(border==null)
			border = getHoverBorder(button, true);
		return border;
	}
	
	protected Border getHoverBorder(AbstractButton button, boolean active) {
		Border border = active? borderActiveHover: borderDefaultHover;
		if(border==null)
			border = getDefaultBorder(button, active);
		return border;
	}
	
	protected Border getDefaultBorder(AbstractButton button, boolean active) {
		return active? borderActive: borderDefault;
	}

	


	protected void paintIcon(Graphics g, AbstractButton b) {
		Icon icon = getIcon(b);
		if(icon==null)
			return;
		
		int h = icon.getIconHeight();
		int w = icon.getIconWidth();
		int x = b.getWidth()/2 - w/2;
		int y = b.getHeight()/2 - h/2;
		
		icon.paintIcon(b, g, x, y);
	}
	
	protected Icon getIcon(AbstractButton button) {
	    boolean active = isParentActive(button);

	    if(!button.isEnabled() || !button.getModel().isEnabled())
	        return getDisabledIcon(button, active);
	    
		if(isPressed(button))
			return getPressedIcon(button);
		
		if(button.getModel().isRollover())
			return getHoverIcon(button, active);
		
		return getDefaultIcon(button, active);
	}
	
	protected Icon getDisabledIcon(AbstractButton button, boolean active) {
		Icon icon = button.getDisabledIcon();
		if(icon==null)
			icon = getActionIcon(button, false, active, false);
		if(icon==null)
			icon = getDefaultIcon(button, active);
		return icon;
	}
	
	protected Icon getPressedIcon(AbstractButton button) {
		Icon icon = button.getPressedIcon();
		if(icon==null)
			icon = getActionIcon(button, true, true, true);
		if(icon==null)
			icon = getHoverIcon(button, true);
		return icon;
	}
	
	protected Icon getHoverIcon(AbstractButton button, boolean active) {
		Icon icon = button.getRolloverIcon();
		if(icon==null)
			icon = getActionIcon(button, false, active, true);
		if(icon==null)
			icon = getDefaultIcon(button, active);
		return icon;
	}
	
	protected Icon getDefaultIcon(AbstractButton button, boolean active) {
		Icon icon = button.getIcon();
		if(icon==null)
			icon = getActionIcon(button, false, active, false);
		return icon;
	}
	
	protected Icon getActionIcon(AbstractButton button, boolean pressed, boolean active, boolean hover) {
		Action action = button.getAction();
		IconResource resource = action==null? null: (IconResource)action.getValue(ICON_RESOURCE);
		if(resource==null)
			return null;

		boolean disabled = !button.isEnabled() || !button.getModel().isEnabled();
		boolean selected = button.isSelected();
		
		
		if(pressed && !disabled) {
			Icon icon = selected? resource.getIconSelectedPressed(): null;
			if(icon==null)
				icon = resource.getIconPressed();
			return icon;
		}
		
		if(active) {
		    if(disabled) {
		        Icon icon = selected? resource.getIconSelectedActiveDisabled(): null;
				if(icon==null)
					icon = resource.getIconActiveDisabled();
				return icon==null? resource.getIconActive(): icon;
		    }
		    
			if(hover) {
				Icon icon = selected? resource.getIconSelectedActiveHover(): null;
				if(icon==null)
					icon = resource.getIconActiveHover();
				return icon;
			}
			
			Icon icon = selected? resource.getIconSelectedActive(): null;
			if(icon==null)
				icon = resource.getIconActive();
			return icon;
		}
		
		if(disabled) {
			Icon icon = selected? resource.getIconSelectedDisabled(): null;
			if(icon==null)
				icon = resource.getIconDisabled();
			return icon==null? resource.getIcon(): icon;
		}
		
		if(hover) {
			Icon icon = selected? resource.getIconSelectedHover(): null;
			if(icon==null)
				icon = resource.getIconHover();
			return icon;
		}
		
		Icon icon = selected? resource.getIconSelected(): null;
		if(icon==null)
			icon = resource.getIcon();
		return icon;
	}

	protected boolean isPressed(AbstractButton button) {
		ButtonModel model = button.getModel();
		return model.isArmed() && model.isPressed();
	}
	
	protected boolean isParentActive(AbstractButton button) {
		Container parent = button.getParent();
		return parent instanceof Titlebar? ((Titlebar)parent).isActive(): false;
	}
	
	
	public void installUI(JComponent c) {
		super.installUI(c);
		AbstractButton button = (AbstractButton)c;
		button.setRolloverEnabled(true);
		button.setRequestFocusEnabled(false);
		button.setOpaque(false);
		button.setBorder(null);
		
		// add the toggle listener
		button.addItemListener(new ToggleListener());
		updateTooltip(button);
	}

	public void uninstallUI(JComponent c) {
		AbstractButton button = (AbstractButton)c;
		super.uninstallUI(c);
	}
	
    protected void installKeyboardActions(AbstractButton b){
    	// do nothing
    }
    
    protected BasicButtonListener createButtonListener(AbstractButton b) {
        return new ButtonListener(b);
    }
    
    protected static class ButtonListener extends BasicButtonListener {
    	protected ButtonListener(AbstractButton b) {
    		super(b);
    	}
		public void focusGained(FocusEvent e) {
		}
		public void focusLost(FocusEvent e) {
		}
    }

	public void setBorderActive(Border borderActive) {
		this.borderActive = borderActive;
	}

	public void setBorderActiveHover(Border borderActiveHover) {
		this.borderActiveHover = borderActiveHover;
	}

	public void setBorderDefault(Border borderDefault) {
		this.borderDefault = borderDefault;
	}

	public void setBorderDefaultHover(Border borderDefaultHover) {
		this.borderDefaultHover = borderDefaultHover;
	}

	public void setBorderPressed(Border borderPressed) {
		this.borderPressed = borderPressed;
	}

	public PropertySet getCreationParameters() {
		return creationParameters;
	}
	public void setCreationParameters(PropertySet creationParameters) {
		this.creationParameters = creationParameters;
		initializeCreationParameters();
	}
	
	public void initializeCreationParameters() {
		setBorderDefault(creationParameters.getBorder(BORDER));
		setBorderDefaultHover(creationParameters.getBorder(BORDER_HOVER));
		setBorderActive(creationParameters.getBorder(BORDER_ACTIVE));
		setBorderActiveHover(creationParameters.getBorder(BORDER_ACTIVE_HOVER));
		setBorderPressed(creationParameters.getBorder(BORDER_PRESSED));
	}

	private class ToggleListener implements ItemListener {
		public void itemStateChanged(ItemEvent e) {
			if(e.getStateChange()!=ItemEvent.SELECTED && e.getStateChange()!=ItemEvent.DESELECTED)
				return;
			
			Button button = (Button)e.getSource();
			updateTooltip(button);
		}
	}
	
	private void updateTooltip(AbstractButton button) {
		Action action = button.getAction();
		if(action==null)
			return;
		
		String toolTip = (String)action.getValue(Action.SHORT_DESCRIPTION);
		if(toolTip!=null)
			return;
		
		IconResource resource = action==null? null: (IconResource)action.getValue(ICON_RESOURCE);
		if(resource==null)
			return;
		
		toolTip = button.isSelected()? resource.getTooltipSelected(): resource.getTooltip();
		if(toolTip==null)
			toolTip = resource.getTooltip();

		if(toolTip!=null)
			button.setToolTipText(toolTip);		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -