KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jgoodies > looks > windows > WindowsMenuBarUI


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.windows;
32
33 import java.beans.PropertyChangeEvent JavaDoc;
34 import java.beans.PropertyChangeListener JavaDoc;
35
36 import javax.swing.JComponent JavaDoc;
37 import javax.swing.LookAndFeel JavaDoc;
38 import javax.swing.plaf.ComponentUI JavaDoc;
39
40 import com.jgoodies.looks.BorderStyle;
41 import com.jgoodies.looks.HeaderStyle;
42 import com.jgoodies.looks.Options;
43
44 /**
45  * The JGoodies Windows look and feel implemenation of <code>MenuBarUI</code>.<p>
46  *
47  * Can handle optional <code>Border</code> types as specified by the
48  * <code>BorderStyle</code> or <code>HeaderStyle</code> client properties.
49  *
50  * @author Karsten Lentzsch
51  * @version $Revision: 1.2 $
52  */

53 public final class WindowsMenuBarUI extends com.sun.java.swing.plaf.windows.WindowsMenuBarUI {
54     
55     private PropertyChangeListener JavaDoc listener;
56     
57     
58     public static ComponentUI JavaDoc createUI(JComponent JavaDoc b) {
59         return new WindowsMenuBarUI();
60     }
61     
62     
63     // Handling Special Borders *********************************************************
64

65     protected void installDefaults() {
66         super.installDefaults();
67         installSpecialBorder();
68     }
69     
70     
71     protected void installListeners() {
72         super.installListeners();
73         listener = createBorderStyleListener();
74         menuBar.addPropertyChangeListener(listener);
75     }
76     
77     
78     protected void uninstallListeners() {
79         menuBar.removePropertyChangeListener(listener);
80         super.uninstallListeners();
81     }
82     
83     
84     private PropertyChangeListener JavaDoc createBorderStyleListener() {
85         return new PropertyChangeListener JavaDoc() {
86             
87             public void propertyChange(PropertyChangeEvent JavaDoc e) {
88                 String JavaDoc prop = e.getPropertyName();
89                 if(prop.equals(Options.HEADER_STYLE_KEY) ||
90                    prop.equals(WindowsLookAndFeel.BORDER_STYLE_KEY)) {
91                    WindowsMenuBarUI.this.installSpecialBorder();
92                 }
93             }
94             
95         };
96     }
97     
98     
99     /**
100      * Installs a special border, if either a look-dependent
101      * <code>BorderStyle</code> or a look-independent
102      * <code>HeaderStyle</code> has been specified.
103      * A look specific <code>BorderStyle<code> shadows
104      * a <code>HeaderStyle</code>.<p>
105      *
106      * Specifying a <code>HeaderStyle</code> is recommend.
107      */

108     private void installSpecialBorder() {
109         String JavaDoc suffix;
110         BorderStyle borderStyle = BorderStyle.from(menuBar,
111                                                 WindowsLookAndFeel.BORDER_STYLE_KEY);
112         if (borderStyle == BorderStyle.EMPTY)
113             suffix = "emptyBorder";
114         else if (borderStyle == BorderStyle.ETCHED)
115             suffix = "etchedBorder";
116         else if (borderStyle == BorderStyle.SEPARATOR)
117             suffix = "separatorBorder";
118         else if (HeaderStyle.from(menuBar) == HeaderStyle.BOTH)
119             suffix = "headerBorder";
120         else
121             return;
122             
123         LookAndFeel.installBorder(menuBar, "MenuBar." + suffix);
124     }
125
126 }
Popular Tags