Mega Code Archive

 
Categories / Java / Swing Components
 

Demonstrates three different styles when to commit changes

/*  * Copyright (c) 2002-2005 JGoodies Karsten Lentzsch. All Rights Reserved.  *  * Redistribution and use in source and binary forms, with or without   * modification, are permitted provided that the following conditions are met:  *   *  o Redistributions of source code must retain the above copyright notice,   *    this list of conditions and the following disclaimer.   *       *  o Redistributions in binary form must reproduce the above copyright notice,   *    this list of conditions and the following disclaimer in the documentation   *    and/or other materials provided with the distribution.   *       *  o Neither the name of JGoodies Karsten Lentzsch nor the names of   *    its contributors may be used to endorse or promote products derived   *    from this software without specific prior written permission.   *       * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,   * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR   * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,   * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;   * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE   * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.   */ package com.jgoodies.binding.tutorial.basics; import java.awt.event.ActionEvent; import javax.swing.*; import javax.swing.text.JTextComponent; import com.jgoodies.binding.PresentationModel; import com.jgoodies.binding.adapter.BasicComponentFactory; import com.jgoodies.binding.beans.Model; import com.jgoodies.binding.tutorial.TutorialUtils; import com.jgoodies.forms.builder.PanelBuilder; import com.jgoodies.forms.factories.ButtonBarFactory; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; /**  * Demonstrates three different styles when to commit changes:  * on key typed, on focus lost, on OK/Apply pressed.  * Therefore we bind 3 JTextFields to 3 String typed ValueModels  * that honor the commit style. And we bind 3 JLabels directly   * to these ValueModels that display the current value.<p>  *   * The ValueModels used in this example are requested from a  * PresentationModel that adapts text properties of a TextBean.  * This is just to demonstrate a consistent binding style.  * The same techniques work with any ValueModel.  *  * @author Karsten Lentzsch  * @version $Revision: 1.4 $  *   * @see com.jgoodies.binding.PresentationModel  */ public class CommitStylesExample {          /**      * Holds a TextBean and vends ValueModels that adapt TextBean properties.      * As an alternative to this PresentationModel we could use 3 ValueModels,      * for example 3 ValueHolders, or any other ValueModel implementation.      */     private final PresentationModel presentationModel;     private JTextComponent onKeyTypedField;     private JTextComponent onFocusLostField;     private JTextComponent onApplyField;     private JLabel onKeyTypedLabel;     private JLabel onFocusLostLabel;     private JLabel onApplyLabel;     private JButton applyButton;       // Launching **************************************************************          public static void main(String[] args) {         try {             UIManager.setLookAndFeel("com.jgoodies.looks.plastic.PlasticXPLookAndFeel");         } catch (Exception e) {             // Likely PlasticXP is not in the class path; ignore.         }         JFrame frame = new JFrame();         frame.setTitle("Binding Tutorial :: Commit Styles");         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);         CommitStylesExample example = new CommitStylesExample();         JComponent panel = example.build();         frame.getContentPane().add(panel);         frame.pack();         TutorialUtils.locateOnScreenCenter(frame);         frame.setVisible(true);     }               // Instance Creation ******************************************************          /**      * Constructs the example with a PresentationModel on the a TextBean.      */     public CommitStylesExample() {         this.presentationModel = new PresentationModel(new TextBean());     }          // Component Creation and Initialization **********************************     /**      * Creates,binds and configures the UI components.<p>       */     private void initComponents() {         onKeyTypedField = BasicComponentFactory.createTextField(                 presentationModel.getModel(TextBean.PROPERTYNAME_TEXT1), false);         onKeyTypedLabel = BasicComponentFactory.createLabel(                 presentationModel.getModel(TextBean.PROPERTYNAME_TEXT1));         onFocusLostField = BasicComponentFactory.createTextField(                 presentationModel.getModel(TextBean.PROPERTYNAME_TEXT2));         onFocusLostLabel = BasicComponentFactory.createLabel(                 presentationModel.getModel(TextBean.PROPERTYNAME_TEXT2));         onApplyField = BasicComponentFactory.createTextField(                 presentationModel.getBufferedModel(TextBean.PROPERTYNAME_TEXT3));         onApplyLabel = BasicComponentFactory.createLabel(                 presentationModel.getModel(TextBean.PROPERTYNAME_TEXT3));         applyButton = new JButton(new ApplyAction());     }               // Building ***************************************************************     /**      * Builds the pane.      *       * @return the built panel      */     public JComponent build() {         initComponents();         FormLayout layout = new FormLayout(                 "right:max(50dlu;pref), 3dlu, 50dlu, 9dlu, 50dlu",                 "p, 6dlu, p, 3dlu, p, 3dlu, p, 17dlu, p");                          PanelBuilder builder = new PanelBuilder(layout);         builder.setDefaultDialogBorder();         CellConstraints cc = new CellConstraints();         builder.addTitle("Commit Style",    cc.xy (1, 1));         builder.addTitle("Value",           cc.xy (5, 1));         builder.addLabel("Key Typed",       cc.xy (1, 3));         builder.add(onKeyTypedField,        cc.xy (3, 3));         builder.add(onKeyTypedLabel,        cc.xy (5, 3));         builder.addLabel("Focus Lost",      cc.xy (1, 5));         builder.add(onFocusLostField,       cc.xy (3, 5));         builder.add(onFocusLostLabel,       cc.xy (5, 5));         builder.addLabel("Apply Pressed",   cc.xy (1, 7));         builder.add(onApplyField,           cc.xy (3, 7));         builder.add(onApplyLabel,           cc.xy (5, 7));         builder.add(buildButtonBar(),       cc.xyw(1, 9, 5));                  return builder.getPanel();     }               private JComponent buildButtonBar() {         return ButtonBarFactory.buildRightAlignedBar(                 applyButton);     }               // Actions ****************************************************************          private final class ApplyAction extends AbstractAction {                  private ApplyAction() {             super("Apply");         }                  public void actionPerformed(ActionEvent e) {             presentationModel.triggerCommit();         }     }          // Helper Class ***********************************************************     /**      * A simple bean that just provides three bound read-write text properties.      */     public static final class TextBean extends Model {                  // Names for the Bound Bean Properties ---------------------                  public static final String PROPERTYNAME_TEXT1 = "text1";         public static final String PROPERTYNAME_TEXT2 = "text2";         public static final String PROPERTYNAME_TEXT3 = "text3";                  private String text1;         private String text2;         private String text3;                           // Instance Creation ---------------------------------------                  private TextBean() {             text1 = "Text1";             text2 = "Text2";             text3 = "Text3";         }                           // Accessors -----------------------------------------------                  public String getText1() {             return text1;         }                  public void setText1(String newText1) {             String oldText1 = getText1();             text1 = newText1;             firePropertyChange(PROPERTYNAME_TEXT1, oldText1, newText1);         }              public String getText2() {             return text2;         }                  public void setText2(String newText2) {             String oldText2 = getText2();             text2 = newText2;             firePropertyChange(PROPERTYNAME_TEXT2, oldText2, newText2);         }              public String getText3() {             return text3;         }                  public void setText3(String newText3) {             String oldText3 = getText3();             text3 = newText3;             firePropertyChange(PROPERTYNAME_TEXT3, oldText3, newText3);         }              }           }                     binding.zip( 506 k)