KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jgoodies > looks > common > ExtBasicMenuItemUI


1 /*
2  * Copyright (c) 2001-2005 JGoodies Karsten Lentzsch. All Rights Reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * o Redistributions of source code must retain the above copyright notice,
8  * this list of conditions and the following disclaimer.
9  *
10  * o Redistributions in binary form must reproduce the above copyright notice,
11  * this list of conditions and the following disclaimer in the documentation
12  * and/or other materials provided with the distribution.
13  *
14  * o Neither the name of JGoodies Karsten Lentzsch nor the names of
15  * its contributors may be used to endorse or promote products derived
16  * from this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
27  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */

30
31 package com.jgoodies.looks.common;
32
33 import java.awt.Color JavaDoc;
34 import java.awt.Dimension JavaDoc;
35 import java.awt.Graphics JavaDoc;
36
37 import javax.swing.Icon JavaDoc;
38 import javax.swing.JComponent JavaDoc;
39 import javax.swing.UIManager JavaDoc;
40 import javax.swing.plaf.ComponentUI JavaDoc;
41 import javax.swing.plaf.basic.BasicMenuItemUI JavaDoc;
42
43 /**
44  * An implementation of <code>MenuItemUI</code> used by the
45  * JGoodies Windows and Plastic looks.
46  * Unlike it's superclass it aligns menu items, uses a slightly
47  * smaller gap between text and icon, which you can override
48  * in the UI defaults.
49  *
50  * @author Karsten Lentzsch
51  * @version $Revision: 1.2 $
52  */

53
54 public class ExtBasicMenuItemUI extends BasicMenuItemUI JavaDoc {
55
56     private static final int MINIMUM_WIDTH = 80;
57
58     private MenuItemRenderer renderer;
59
60     public static ComponentUI JavaDoc createUI(JComponent JavaDoc b) {
61         return new ExtBasicMenuItemUI();
62     }
63
64     protected void installDefaults() {
65         super.installDefaults();
66         renderer =
67             new MenuItemRenderer(
68                 menuItem,
69                 iconBorderEnabled(),
70                 acceleratorFont,
71                 selectionForeground,
72                 disabledForeground,
73                 acceleratorForeground,
74                 acceleratorSelectionForeground);
75         Integer JavaDoc gap =
76             (Integer JavaDoc) UIManager.get(getPropertyPrefix() + ".textIconGap");
77         defaultTextIconGap = gap != null ? gap.intValue() : 2;
78     }
79
80     // RadioButtonMenuItems and CheckBoxMenuItems will override
81
protected boolean iconBorderEnabled() {
82         return false;
83     }
84
85     protected void uninstallDefaults() {
86         super.uninstallDefaults();
87         renderer = null;
88     }
89
90     protected Dimension JavaDoc getPreferredMenuItemSize(
91         JComponent JavaDoc c,
92         Icon JavaDoc aCheckIcon,
93         Icon JavaDoc anArrowIcon,
94         int textIconGap) {
95         //if (storedCheckIcon == null) replaceIcons();
96
Dimension JavaDoc size =
97             renderer.getPreferredMenuItemSize(
98                 c,
99                 aCheckIcon,
100                 anArrowIcon,
101                 textIconGap);
102         int width = Math.max(MINIMUM_WIDTH, size.width);
103         int height = size.height;
104         return new Dimension JavaDoc(width, height);
105     }
106
107     protected void paintMenuItem(
108         Graphics JavaDoc g,
109         JComponent JavaDoc c,
110         Icon JavaDoc aCheckIcon,
111         Icon JavaDoc anArrowIcon,
112         Color JavaDoc background,
113         Color JavaDoc foreground,
114         int textIconGap) {
115         renderer.paintMenuItem(
116             g,
117             c,
118             aCheckIcon,
119             anArrowIcon,
120             background,
121             foreground,
122             textIconGap);
123     }
124
125 }
Popular Tags