12d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// © 2016 and later: Unicode, Inc. and others. 22d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License 3bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/* 4bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ******************************************************************************* 5bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Copyright (C) 1997-2010, International Business Machines Corporation and * 6bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * others. All Rights Reserved. * 7bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ******************************************************************************* 8bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 9bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertpackage com.ibm.icu.dev.demo.holiday; 10bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 11bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Color; 12bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Dimension; 13bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Font; 14bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.FontMetrics; 15bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Graphics; 16bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Insets; 17bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Panel; 18bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 19bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/** 20bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Various graphical borders. The border itself is a Panel so that it can 21bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * contain other Components (i.e. it borders something). You use the 22bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * HolidayBorderPanel like any other Panel: you set the layout that you prefer and 23bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * add Components to it. Beware that a null layout does not obey the insets 24bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * of the panel so if you use null layouts, adjust your measurements to 25bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * handle the border by calling insets(). 26bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 27bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @author Andy Clark, Taligent Inc. 28bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @version 1.0 29bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 30bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertpublic class HolidayBorderPanel extends Panel { 31bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 32bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * For serialization 33bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 34bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private static final long serialVersionUID = 4669213306492461159L; 35bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // Constants 36bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 37bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Solid border. */ 38bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int SOLID = 0; 39bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** A raised border. */ 40bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int RAISED = 1; 41bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** A lowered border. */ 42bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int LOWERED = 2; 43bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** An etched in border. */ 44bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int IN = 3; 45bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** An etched out border. */ 46bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int OUT = 4; 47bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 48bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Left alignment. */ 49bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int LEFT = 0; 50bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Center alignment. */ 51bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int CENTER = 1; 52bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Right alignment. */ 53bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int RIGHT = 2; 54bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 55bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Default style (IN). */ 56bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int DEFAULT_STYLE = IN; 57bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Default thickness (10). */ 58bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int DEFAULT_THICKNESS = 10; 59bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Default thickness for solid borders (4). */ 60bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int DEFAULT_SOLID_THICKNESS = 4; 61bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Default thickness for raised borders (2). */ 62bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int DEFAULT_RAISED_THICKNESS = 2; 63bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Default thickness for lowered borders (2). */ 64bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int DEFAULT_LOWERED_THICKNESS = 2; 65bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Default thickness for etched-in borders (10). */ 66bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int DEFAULT_IN_THICKNESS = 10; 67bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Default thickness for etched-out borders (10). */ 68bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int DEFAULT_OUT_THICKNESS = 10; 69bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Default gap between border and contained component (5). */ 70bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int DEFAULT_GAP = 5; 71bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Default color (black). Applies to SOLID and etched borders. */ 72bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static Color DEFAULT_COLOR = Color.black; 73bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 74bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Default font (TimesRoman,PLAIN,14). Only applies to etched borders. */ 75bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static Font DEFAULT_FONT = new Font("TimesRoman", Font.PLAIN, 14); 76bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** Default alignment (LEFT). Only applies to etched borders. */ 77bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public final static int DEFAULT_ALIGNMENT = LEFT; 78bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 79bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // Data 80bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private int style; 81bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private int thickness; 82bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private int gap; 83bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private Color color; 84bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 85bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private Font font; 86bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private String text; 87bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private int alignment; 88bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 89bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 90bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Constructor. Makes default border. 91bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 92bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public HolidayBorderPanel() { 93bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 94bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // initialize data 95bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert style = DEFAULT_STYLE; 96bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert thickness = DEFAULT_THICKNESS; 97bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert gap = DEFAULT_GAP; 98bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert color = DEFAULT_COLOR; 99bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 100bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert text = null; 101bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert font = DEFAULT_FONT; 102bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert alignment = DEFAULT_ALIGNMENT; 103bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 104bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 105bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 106bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 107bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Constructor. Makes an etched IN border with given text caption. 108bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 109bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param text Text caption 110bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 111bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public HolidayBorderPanel(String text) { 112bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this(); 113bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 114bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert style = IN; 115bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.text = text; 116bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 117bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 118bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 119bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Constructor. Makes SOLID border with color and thickness given. 120bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 121bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param color The color for the border. 122bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param thickness The thickness of the border. 123bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 124bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public HolidayBorderPanel(Color color, int thickness) { 125bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this(); 126bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 127bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert style = SOLID; 128bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.color = color; 129bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.thickness = thickness; 130bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 131bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 132bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 133bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Constructor. Makes a border of the given style with the default 134bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * thickness for that style. 135bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 136bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param style The style for this border. 137bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 138bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public HolidayBorderPanel(int style) { 139bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this(); 140bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 141bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // set thickness appropriate to this style 142bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert switch (style) { 143bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case SOLID: thickness = DEFAULT_SOLID_THICKNESS; break; 144bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case RAISED: thickness = DEFAULT_RAISED_THICKNESS; break; 145bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case LOWERED: thickness = DEFAULT_LOWERED_THICKNESS; break; 146bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case IN: thickness = DEFAULT_IN_THICKNESS; break; 147bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case OUT: thickness = DEFAULT_OUT_THICKNESS; break; 148bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert default: 149bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert thickness = DEFAULT_THICKNESS; 150bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 151bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 152bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.style = style; 153bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 154bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 155bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 156bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Constructor. Makes border with given style and thickness. 157bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 158bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param style The style for this border. 159bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param thickness The thickness for this border. 160bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 161bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public HolidayBorderPanel(int style, int thickness) { 162bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this(); 163bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 164bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.style = style; 165bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.thickness = thickness; 166bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 167bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 168bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 169bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Returns the insets of this panel.. 170bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 171bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public Insets getInsets() { 172bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int adjustment = 0; 173bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 174bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // adjust for text string 175bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (style == IN || style == OUT) { 176bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (text != null && text.length() > 0) { 177bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert try { 178bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // set font and get info 179bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int height = getGraphics().getFontMetrics(font).getHeight(); 180bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (height > thickness) 181bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert adjustment = height - thickness; 182bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 183bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert catch (Exception e) { 184bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // nothing: just in case there is no graphics context 185bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // at the beginning. 186bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert System.out.print(""); 187bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 188bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 189bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 190bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 191bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // return appropriate insets 192bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int dist = thickness + gap; 193bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return new Insets(dist + adjustment, dist, dist, dist); 194bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 195bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 196bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 197bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Sets the style of the border 198bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 199bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param style The new style. 200bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 201bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public HolidayBorderPanel setStyle(int style) { 202bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 203bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // set the style and re-layout the panel 204bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.style = style; 205bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert doLayout(); 206bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert repaint(); 207bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 208bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return this; 209bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 210bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 211bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 212bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Gets the style of the border 213bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 214bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int getStyle() { 215bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 216bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return style; 217bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 218bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 219bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 220bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Sets the thickness of the border. 221bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 222bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param thickness The new thickness 223bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 224bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public HolidayBorderPanel setThickness(int thickness) { 225bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 226bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (thickness > 0) { 227bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.thickness = thickness; 228bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert doLayout(); 229bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert repaint(); 230bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 231bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 232bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return this; 233bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 234bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 235bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 236bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Gets the thickness of the border. 237bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 238bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int getThickness() { 239bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 240bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return thickness; 241bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 242bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 243bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 244bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Sets the gap between the border and the contained Component. 245bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 246bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param gap The new gap, in pixels. 247bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 248bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public HolidayBorderPanel setGap(int gap) { 249bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 250bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (gap > -1) { 251bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.gap = gap; 252bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert doLayout(); 253bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert repaint(); 254bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 255bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 256bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return this; 257bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 258bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 259bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 260bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Gets the gap between the border and the contained Component. 261bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 262bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int getGap() { 263bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 264bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return gap; 265bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 266bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 267bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 268bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Sets the current color for SOLID borders and the caption text 269bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * color for etched borders. 270bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 271bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param color The new color. 272bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 273bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public HolidayBorderPanel setColor(Color color) { 274bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 275bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.color = color; 276bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (style == SOLID || style == IN || style == OUT) 277bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert repaint(); 278bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 279bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return this; 280bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 281bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 282bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 283bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Gets the current color for SOLID borders and the caption 284bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * text color for etched borders. 285bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 286bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public Color getColor() { 287bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 288bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return color; 289bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 290bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 291bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 292bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Sets the font. Only applies to etched borders. 293bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 294bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public HolidayBorderPanel setTextFont(Font font) { 295bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 296bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // set font 297bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (font != null) { 298bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.font = font; 299bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (style == IN || style == OUT) { 300bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert doLayout(); 301bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert repaint(); 302bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 303bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 304bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 305bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return this; 306bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 307bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 308bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 309bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Gets the font of the text. Only applies to etched borders. 310bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 311bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public Font getTextFont() { 312bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 313bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return font; 314bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 315bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 316bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 317bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Sets the text. Only applies to etched borders. 318bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 319bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param text The new text. 320bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 321bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public HolidayBorderPanel setText(String text) { 322bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 323bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.text = text; 324bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (style == IN || style == OUT) { 325bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert doLayout(); 326bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert repaint(); 327bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 328bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 329bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return this; 330bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 331bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 332bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 333bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Gets the text. Only applies to etched borders. 334bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 335bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public String getText() { 336bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 337bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return text; 338bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 339bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 340bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 341bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Sets the text alignment. Only applies to etched borders. 342bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 343bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param alignment The new alignment. 344bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 345bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public HolidayBorderPanel setAlignment(int alignment) { 346bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 347bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.alignment = alignment; 348bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (style == IN || style == OUT) { 349bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert doLayout(); 350bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert repaint(); 351bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 352bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 353bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return this; 354bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 355bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 356bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 357bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Gets the text alignment. 358bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 359bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public int getAlignment() { 360bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 361bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return alignment; 362bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 363bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 364bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 365bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Repaints the border. 366bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 367bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @param g The graphics context. 368bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 369bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void paint(Graphics g) { 370bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 371bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // get current dimensions 372bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Dimension size = getSize(); 373bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int width = size.width; 374bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int height = size.height; 375bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 376bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // set colors 377bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Color light = getBackground().brighter().brighter().brighter(); 378bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Color dark = getBackground().darker().darker().darker(); 379bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 380bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // Draw border 381bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert switch (style) { 382bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case RAISED: // 3D Border (in or out) 383bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case LOWERED: 384bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Color topleft = null; 385bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Color bottomright = null; 386bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 387bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // set colors 388bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (style == RAISED) { 389bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert topleft = light; 390bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert bottomright = dark; 391bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 392bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert else { 393bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert topleft = dark; 394bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert bottomright = light; 395bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 396bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 397bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // draw border 398bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.setColor(topleft); 399bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < thickness; i++) { 400bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.drawLine(i, i, width - i - 2, i); 401bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.drawLine(i, i + 1, i, height - i - 1); 402bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 403bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.setColor(bottomright); 404bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < thickness; i++) { 405bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.drawLine(i + 1, height - i - 1, width - i - 1, height - i - 1); 406bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.drawLine(width - i - 1, i, width - i - 1, height - i - 2); 407bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 408bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert break; 409bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 410bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case IN: // Etched Border (in or out) 411bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case OUT: 412bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int adjust1 = 0; 413bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int adjust2 = 0; 414bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 415bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // set font and get info 416bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Font oldfont = g.getFont(); 417bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.setFont(font); 418bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert FontMetrics fm = g.getFontMetrics(); 419bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int ascent = fm.getAscent(); 420bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 421bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // set adjustment 422bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (style == IN) 423bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert adjust1 = 1; 424bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert else 425bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert adjust2 = 1; 426bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 427bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // Calculate adjustment for text 428bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int adjustment = 0; 429bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (text != null && text.length() > 0) { 430bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (ascent > thickness) 431bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert adjustment = (ascent - thickness) / 2; 432bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 433bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 434bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // The adjustment is there so that we always draw the 435bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // light rectangle first. Otherwise, your eye picks up 436bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // the discrepancy where the light rect. passes over 437bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // the darker rect. 438bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int x = thickness / 2; 439bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int y = thickness / 2 + adjustment; 440bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int w = width - thickness - 1; 441bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int h = height - thickness - 1 - adjustment; 442bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 443bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // draw rectangles 444bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.setColor(light); 445bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.drawRect(x + adjust1, y + adjust1, w, h); 446bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.setColor(dark); 447bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.drawRect(x + adjust2, y + adjust2, w, h); 448bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 449bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // draw text, if applicable 450bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (text != null && text.length() > 0) { 451bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // calculate drawing area 452bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int fontheight = fm.getHeight(); 453bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int strwidth = fm.stringWidth(text); 454bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 455bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int textwidth = width - 2 * (thickness + 5); 456bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (strwidth > textwidth) 457bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert strwidth = textwidth; 458bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 459bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // calculate offset for alignment 460bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int offset; 461bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert switch (alignment) { 462bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case CENTER: 463bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert offset = (width - strwidth) / 2; 464bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert break; 465bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case RIGHT: 466bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert offset = width - strwidth - thickness - 5; 467bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert break; 468bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case LEFT: 469bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert default: // assume left alignment if invalid 470bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert offset = thickness + 5; 471bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert break; 472bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 473bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 474bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // clear drawing area and set clipping region 475bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.clearRect(offset - 5, 0, strwidth + 10, fontheight); 476bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.clipRect(offset, 0, strwidth, fontheight); 477bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 478bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // draw text 479bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.setColor(color); 480bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.drawString(text, offset, ascent); 481bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 482bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // restore old clipping area 483bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.clipRect(0, 0, width, height); 484bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 485bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 486bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.setFont(oldfont); 487bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert break; 488bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 489bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case SOLID: 490bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert default: // assume SOLID 491bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.setColor(color); 492bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < thickness; i++) 493bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert g.drawRect(i, i, width - 2 * i - 1, height - 2 * i - 1); 494bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 495bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 496bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 497bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 498bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 499bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Returns the settings of this HolidayBorderPanel instance as a string. 500bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 501bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public String toString() { 502bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert StringBuffer str = new StringBuffer("HolidayBorderPanel["); 503bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 504bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // style 505bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append("style="); 506bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert switch (style) { 507bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case SOLID: str.append("SOLID"); break; 508bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case RAISED: str.append("RAISED"); break; 509bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case LOWERED: str.append("LOWERED"); break; 510bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case IN: str.append("IN"); break; 511bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case OUT: str.append("OUT"); break; 512bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert default: str.append("unknown"); 513bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 514bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append(","); 515bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 516bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // thickness 517bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append("thickness="); 518bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append(thickness); 519bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append(","); 520bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 521bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // gap 522bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append("gap="); 523bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append(gap); 524bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append(","); 525bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 526bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // color 527bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append(color); 528bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append(","); 529bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 530bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // font 531bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append(font); 532bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append(","); 533bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 534bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // text 535bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append("text="); 536bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append(text); 537bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append(","); 538bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 539bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // alignment 540bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append("alignment="); 541bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert switch (alignment) { 542bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case LEFT: str.append("LEFT"); break; 543bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case CENTER: str.append("CENTER"); break; 544bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert case RIGHT: str.append("RIGHT"); break; 545bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert default: str.append("unknown"); 546bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 547bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 548bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert str.append("]"); 549bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 550bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return str.toString(); 551bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 552bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 553bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 554bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 555