001 package org.springframework.richclient.form.binding.swing; 002 003 import org.springframework.binding.form.FormModel; 004 import org.springframework.richclient.form.binding.support.CustomBinding; 005 import org.springframework.richclient.components.FileChooser; 006 007 import javax.swing.*; 008 import java.awt.event.FocusListener; 009 import java.awt.event.FocusEvent; 010 011 public class FileChooserBinding extends CustomBinding 012 { 013 private final FileChooser field; 014 private final boolean useFile; 015 016 public FileChooserBinding(FormModel model, String path, Class<?> class1, FileChooser field, 017 FileChooser.FileChooserMode mode, boolean useFile) 018 { 019 super(model, path, class1); 020 this.field = field; 021 this.field.setMode(mode); 022 this.useFile = useFile; 023 } 024 025 protected void valueModelChanged(Object newValue) 026 { 027 if (!useFile) 028 { 029 field.setText((String) newValue); 030 } 031 else 032 { 033 field.setText(((java.io.File) newValue).getAbsolutePath()); 034 } 035 readOnlyChanged(); 036 } 037 038 protected JComponent doBindControl() 039 { 040 if (!useFile && getValue() != null) 041 { 042 field.setText((String) getValue()); 043 } 044 else if (useFile && getValue() != null) 045 { 046 field.setText(((java.io.File) getValue()).getAbsolutePath()); 047 } 048 else 049 { 050 field.setText(""); 051 } 052 field.addFocusListener(new FocusListener() 053 { 054 055 public void focusGained(FocusEvent e) 056 { 057 } 058 059 public void focusLost(FocusEvent e) 060 { 061 if (field.isEditable()) 062 { 063 if (useFile) 064 { 065 controlValueChanged(new java.io.File(field.getText())); 066 } 067 else 068 { 069 controlValueChanged(field.getText()); 070 } 071 } 072 } 073 }); 074 return field; 075 } 076 077 protected void readOnlyChanged() 078 { 079 field.setEditable(isEnabled() && !isReadOnly()); 080 } 081 082 protected void enabledChanged() 083 { 084 field.setEnabled(isEnabled()); 085 readOnlyChanged(); 086 } 087 }