001: /*
002: * Copyright (c) 2002-2007 JGoodies Karsten Lentzsch. All Rights Reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of JGoodies Karsten Lentzsch nor the names of
015: * its contributors may be used to endorse or promote products derived
016: * from this software without specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
020: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
021: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
022: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
023: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
025: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
026: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
027: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
028: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
029: */
030:
031: package com.jgoodies.forms.builder;
032:
033: import java.util.MissingResourceException;
034: import java.util.ResourceBundle;
035:
036: import javax.swing.JPanel;
037:
038: import com.jgoodies.forms.layout.FormLayout;
039:
040: /**
041: * A general purpose panel builder that uses the {@link FormLayout}
042: * to lay out <code>JPanel</code>s. In addition to its superclass
043: * {@link PanelBuilder} this class provides convenience behavior to map
044: * resource keys to their associated internationalized (i15d) strings
045: * when adding labels, titles and titled separators.<p>
046: *
047: * The localized texts used in methods <code>#addI15dLabel</code>
048: * and <code>#addI15dTitle</code> can contain an optional mnemonic marker.
049: * The mnemonic and mnemonic index are indicated by a single ampersand
050: * (<tt>&</tt>). For example <tt>"&Save"</tt>, or
051: * <tt>"Save &as"</tt>. To use the ampersand itself,
052: * duplicate it, for example <tt>"Look&&Feel"</tt>.<p>
053: *
054: * @author Karsten Lentzsch
055: * @version $Revision: 1.5 $
056: * @since 1.0.3
057: *
058: * @see ResourceBundle
059: */
060: public class I15dPanelBuilder extends AbstractI15dPanelBuilder {
061:
062: /**
063: * Holds the <code>ResourceBundle</code> used to lookup internationalized
064: * (i15d) String resources.
065: */
066: private final ResourceBundle bundle;
067:
068: // Instance Creation ****************************************************
069:
070: /**
071: * Constructs an <code>I15dPanelBuilder</code> for the given
072: * layout and resource bundle. Uses an instance of <code>JPanel</code>
073: * as layout container.
074: *
075: * @param layout the <code>FormLayout</code> used to layout the container
076: * @param bundle the <code>ResourceBundle</code> used to lookup i15d strings
077: */
078: public I15dPanelBuilder(FormLayout layout, ResourceBundle bundle) {
079: this (layout, bundle, new JPanel(null));
080: }
081:
082: /**
083: * Constructs an <code>I15dPanelBuilder</code>
084: * for the given FormLayout, resource bundle, and layout container.
085: *
086: * @param layout the <code>FormLayout</code> used to layout the container
087: * @param bundle the <code>ResourceBundle</code> used to lookup i15d strings
088: * @param panel the layout container
089: */
090: public I15dPanelBuilder(FormLayout layout, ResourceBundle bundle,
091: JPanel panel) {
092: super (layout, panel);
093: this .bundle = bundle;
094: }
095:
096: // Implementing Abstract Behavior *****************************************
097:
098: /**
099: * Looks up and returns the internationalized (i15d) string for the given
100: * resource key from the <code>ResourceBundle</code>.
101: *
102: * @param resourceKey the key to look for in the resource bundle
103: * @return the associated internationalized string, or the resource key
104: * itself in case of a missing resource
105: * @throws IllegalStateException if no <code>ResourceBundle</code>
106: * has been set
107: */
108: protected String getI15dString(String resourceKey) {
109: if (bundle == null)
110: throw new IllegalStateException(
111: "You must specify a ResourceBundle"
112: + " before using the internationalization support.");
113: try {
114: return bundle.getString(resourceKey);
115: } catch (MissingResourceException mre) {
116: return resourceKey;
117: }
118: }
119:
120: }
|