All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.monte.media.gui.border.ButtonStateBorder Maven / Gradle / Ivy

There is a newer version: 1.1
Show newest version
/*
* @(#)ButtonStateBorder.java  1.2  2009-11-20
 *
 * Copyright (c) 2006-2009 Werner Randelshofer, Goldau, Switzerland.
 * All rights reserved.
 *
 * You may not use, copy or modify this file, except in compliance with the
 * license agreement you entered into with Werner Randelshofer.
 * For details see accompanying license terms.
 */

package org.monte.media.gui.border;

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
/**
 * ButtonStateBorder.
 *
 * @author  Werner Randelshofer
 * @version 1.2 2009-11-20 Added more constructors.
 * 
1.1 2005-11-30 Method getBorderInsets() returns border insets from * variable borderInsets, if it is not null. This allows to defer image loading * until the border needs to be painted. *
1.0.4 2005-10-03 Draw default state only, if button is not pressed. *
1.0.3 2005-09-30 Draw pressed state only, if button state "isPressed" * _and_ "isArmed" are true. *
1.0.2 2005-06-25 Return a new instance of insets in method getBorderInsets. *
1.0.1 2005-04-17 Blinking default button needs to be drawn on * all window types, and not just on JDialog's. *
1.0 18 March 2005 Created. */ public class ButtonStateBorder implements Border { public final static int E = 0; public final static int EP = 1; public final static int ES = 2; public final static int EPS = 3; public final static int D = 4; public final static int DS = 5; public final static int I = 6; public final static int IS = 7; public final static int DI = 8; public final static int DIS = 9; public final static int DEFAULT = 10; /** * Borders */ private Border[] borders; /** Holds the icon pictures in a single image. This variable is used only *until we create the icons array. Then it is set to null. */ private Image tiledImage; /** * The number of icons in the tiledImage. */ private int tileCount; /** * Whether the tiledImage needs to be tiled horizontally or vertically * to get the icons out of it. */ private boolean isTiledHorizontaly; private Insets borderInsets; /** Only used for tiled image. */ private boolean fill; /** Only used for tiled image. */ private Insets imageInsets; /** * Creates a new instance. * All borders must have the same insets. * If a border is null, nothing is drawn for this state. */ public ButtonStateBorder(Border e, Border es) { borders = new Border[DEFAULT+1]; borders[E] = e; borders[EP] = es; borders[ES] = es; borders[EPS] = es; borders[D] = e; borders[DS] = es; borders[I] = e; borders[IS] = es; borders[DI] = es; borders[DIS] = es; } /** * Creates a new instance. * All borders must have the same insets. * If a border is null, nothing is drawn for this state. */ public ButtonStateBorder(Border e, Border ep, Border es, Border eps, Border d, Border ds, Border i, Border is, Border di, Border dis) { borders = new Border[DEFAULT+1]; borders[E] = e; borders[EP] = ep; borders[ES] = es; borders[EPS] = eps; borders[D] = d; borders[DS] = ds; borders[I] = i; borders[IS] = is; borders[DI] = dis; borders[DIS] = dis; } /** * Creates a new instance. * All borders must have the same insets. */ public ButtonStateBorder(Border[] borders) { this.borders = new Border[DEFAULT+1]; System.arraycopy(borders, 0, this.borders, 0, Math.min(borders.length, this.borders.length)); } /** * Creates a new instance. * All borders must have the same dimensions. */ public ButtonStateBorder(Image tiledImage, int tileCount, boolean isTiledHorizontaly, Insets imageInsets, Insets borderInsets, boolean fill) { this.tiledImage = tiledImage; this.tileCount = tileCount; this.isTiledHorizontaly = isTiledHorizontaly; this.imageInsets = imageInsets; this.borderInsets = borderInsets; this.fill = fill; } public void setBorder(int key, Border b) { borders[key] = b; } public Insets getBorderInsets(Component c) { if (borderInsets != null) { return (Insets) borderInsets.clone(); } else { return (Insets) borders[0].getBorderInsets(c).clone(); } } public boolean isBorderOpaque() { return borders[0].isBorderOpaque(); } public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { Border border = getBorder(c); if (border != null) { border.paintBorder(c, g, x, y, width, height); } } protected Border getBorder(Component c) { Border border; boolean isActive = true; //QuaquaUtilities.isOnActiveWindow(c); if (c instanceof AbstractButton) { ButtonModel model = ((AbstractButton) c).getModel(); if (isActive) { if (model.isEnabled()) { if (model.isPressed() && model.isArmed()) { if (model.isSelected()) { border = borders[EPS]; } else { border = borders[EP]; } } else if (model.isSelected()) { border = borders[ES]; } else { if (!model.isPressed() && borders[DEFAULT] != null && (c instanceof JButton) && ((JButton) c).isDefaultButton() ) { border = borders[DEFAULT]; } else { border = borders[E]; } } } else { if (model.isSelected()) { border = borders[DS]; } else { border = borders[D]; } } } else { if (model.isEnabled()) { if (model.isSelected()) { border = borders[IS]; } else { border = borders[I]; } } else { if (model.isSelected()) { border = borders[DIS]; } else { border = borders[DI]; } } } } else { if (isActive) { if (c.isEnabled()) { border = borders[E]; } else { border = borders[D]; } } else { if (c.isEnabled()) { border = borders[I]; } else { border = borders[DI]; } } } return border; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy