01: /*
02: * Copyright (c) 2004 JETA Software, Inc. All rights reserved.
03: *
04: * Redistribution and use in source and binary forms, with or without modification,
05: * are permitted provided that the following conditions are met:
06: *
07: * o Redistributions of source code must retain the above copyright notice,
08: * this list of conditions and the following disclaimer.
09: *
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 JETA Software nor the names of its contributors may
15: * be used to endorse or promote products derived from this software without
16: * 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, THE
20: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21: * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22: * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23: * INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25: * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26: * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28: */
29:
30: package com.jeta.forms.components.border;
31:
32: import java.awt.Dimension;
33: import java.awt.Graphics;
34:
35: import javax.swing.JComponent;
36: import javax.swing.UIManager;
37: import javax.swing.border.Border;
38: import javax.swing.plaf.ComponentUI;
39:
40: /**
41: * The UI for a component that simulates the bottom of a TitledBorder. This
42: * component is useful when flattening layouts. It allows a titled border to be
43: * used to separate components, while allowing those components to stay in the
44: * same row or column of the form. This allows components to have the same x,y,
45: * width, or height, yet have differnt title borders. This is not possible when
46: * using standard TitledBorder.
47: *
48: * @author Jeff Tassin
49: */
50: public class TitledBorderBottomUI extends ComponentUI {
51: /** the preferred width and height */
52: private static final int PREF_WIDTH = 24;
53: private static final int PREF_HEIGHT = 6;
54:
55: /**
56: * Calculates the preferred size for a widget
57: */
58: public Dimension getPreferredSize(JComponent c) {
59: return new Dimension(PREF_WIDTH, PREF_HEIGHT);
60: }
61:
62: /**
63: * Renders the border using the current look and feel.
64: *
65: * @param g
66: * the <code>Graphics</code> context in which to paint
67: * @param c
68: * the component being painted;
69: */
70: public void paint(Graphics g, JComponent c) {
71: Border border = UIManager.getBorder("TitledBorder.border");
72: if (c instanceof TitledBorderBottom && border != null) {
73: /**
74: * render the border at a negative x-offset and y-offset (4 pixels)
75: * so that the top of the rectangle is clipped by the component
76: */
77: border.paintBorder(c, g, -4, -4, c.getWidth() + 8, c
78: .getHeight() + 4);
79: }
80: }
81:
82: }
|