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.binding.tutorial.manager;
032:
033: import javax.swing.JCheckBox;
034: import javax.swing.JComponent;
035: import javax.swing.text.JTextComponent;
036:
037: import com.jgoodies.binding.adapter.BasicComponentFactory;
038: import com.jgoodies.binding.beans.PropertyConnector;
039: import com.jgoodies.binding.tutorial.Album;
040: import com.jgoodies.forms.builder.PanelBuilder;
041: import com.jgoodies.forms.layout.CellConstraints;
042: import com.jgoodies.forms.layout.FormLayout;
043:
044: /**
045: * Builds a form to display and edit Albums. The editor components are bound
046: * to the domain using BufferedValueModels returned by a PresentationModel
047: * that holds a Album. This PresentationModel is the AlbumManagerModel's
048: * 'albumEditorModel'. Whenever the AlbumManagerModel changes the selected Album,
049: * the PresentationModel updates its bean, in this case the Album.
050: *
051: * @author Karsten Lentzsch
052: * @version $Revision: 1.7 $
053: *
054: * @see AlbumManagerModel
055: * @see com.jgoodies.binding.tutorial.AlbumPresentationModel
056: * @see BufferedAlbumPresentationModel
057: * @see com.jgoodies.binding.PresentationModel
058: */
059:
060: public final class AlbumEditorView {
061:
062: /**
063: * Holds the edited Album and vends ValueModels that adapt Album properties.
064: */
065: private final BufferedAlbumPresentationModel presentationModel;
066:
067: private JTextComponent titleField;
068: private JTextComponent artistField;
069: private JCheckBox classicalBox;
070: private JTextComponent composerField;
071:
072: // Instance Creation ******************************************************
073:
074: /**
075: * Constructs an AlbumEditorView for the given Album PresentationModel.
076: *
077: * @param albumPresentationModel provides the adapting ValueModels
078: */
079: public AlbumEditorView(
080: BufferedAlbumPresentationModel albumPresentationModel) {
081: this .presentationModel = albumPresentationModel;
082: }
083:
084: // Initialization *********************************************************
085:
086: /**
087: * Creates and intializes the UI components.
088: */
089: private void initComponents() {
090: titleField = BasicComponentFactory
091: .createTextField(presentationModel
092: .getBufferedModel(Album.PROPERTYNAME_TITLE));
093: artistField = BasicComponentFactory
094: .createTextField(presentationModel
095: .getBufferedModel(Album.PROPERTYNAME_ARTIST));
096: classicalBox = BasicComponentFactory
097: .createCheckBox(
098: presentationModel
099: .getBufferedModel(Album.PROPERTYNAME_CLASSICAL),
100: "Classical");
101: composerField = BasicComponentFactory
102: .createTextField(presentationModel
103: .getBufferedModel(Album.PROPERTYNAME_COMPOSER));
104: }
105:
106: /**
107: * Observes the presentation model's <em>bufferedComposerEnabled</em>
108: * property to update the composer field's enablement.
109: * Also, initializes the field's enablement with the current value
110: * of the buffered composer enabled property.
111: */
112: private void initEventHandling() {
113: PropertyConnector connector = PropertyConnector
114: .connect(
115: presentationModel,
116: BufferedAlbumPresentationModel.PROPERTYNAME_BUFFERED_COMPOSER_ENABLED,
117: composerField, "enabled");
118: connector.updateProperty2();
119: }
120:
121: // Building ***************************************************************
122:
123: /**
124: * Builds and returns the editor panel.
125: *
126: * @return the built panel
127: */
128: public JComponent buildPanel() {
129: initComponents();
130: initEventHandling();
131:
132: FormLayout layout = new FormLayout(
133: "right:pref, 3dlu, 150dlu:grow",
134: "p, 3dlu, p, 3dlu, p, 3dlu, p");
135: layout.setRowGroups(new int[][] { { 1, 3, 5, 7 } });
136:
137: PanelBuilder builder = new PanelBuilder(layout);
138: CellConstraints cc = new CellConstraints();
139:
140: builder.addLabel("Artist", cc.xy(1, 1));
141: builder.add(artistField, cc.xy(3, 1));
142: builder.addLabel("Title", cc.xy(1, 3));
143: builder.add(titleField, cc.xy(3, 3));
144: builder.add(classicalBox, cc.xy(3, 5));
145: builder.addLabel("Composer", cc.xy(1, 7));
146: builder.add(composerField, cc.xy(3, 7));
147:
148: return builder.getPanel();
149: }
150:
151: }
|