* * 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.
*/ 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)