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.SliderLabelFactory; 006 007 import javax.swing.*; 008 import javax.swing.event.ChangeListener; 009 import javax.swing.event.ChangeEvent; 010 011 public class SliderBinding extends CustomBinding 012 { 013 014 private JSlider slider; 015 private boolean readOnly; 016 017 private SliderLabelFactory sliderLabelFactory; 018 private int maxSpacing; 019 020 /** 021 * Creates a new binding 022 * 023 * @param formModel 024 * @param formPropertyPath 025 */ 026 public SliderBinding(FormModel formModel, String formPropertyPath) 027 { 028 super(formModel, formPropertyPath, Integer.class); 029 slider = new JSlider(); 030 slider.addChangeListener(new ChangeListener() 031 { 032 033 public void stateChanged(ChangeEvent e) 034 { 035 controlValueChanged(slider.getValue()); 036 } 037 }); 038 } 039 040 @Override 041 protected void valueModelChanged(Object newValue) 042 { 043 slider.setValue((Integer) newValue); 044 readOnlyChanged(); 045 046 } 047 048 @Override 049 protected JComponent doBindControl() 050 { 051 if (sliderLabelFactory == null) 052 { 053 slider.createStandardLabels(maxSpacing); 054 } 055 else 056 { 057 slider.setLabelTable(sliderLabelFactory.getSliderLabels()); 058 } 059 slider.setPaintLabels(true); 060 slider.setValue((Integer) getValue()); 061 return slider; 062 } 063 064 @Override 065 protected void enabledChanged() 066 { 067 this.slider.setEnabled(isEnabled()); 068 readOnlyChanged(); 069 070 } 071 072 @Override 073 protected void readOnlyChanged() 074 { 075 this.slider.setEnabled(isEnabled() && !isReadOnly() && !readOnly); 076 } 077 078 /** Set the maximum value of the slider */ 079 public void setMaxValue(int maxValue) 080 { 081 slider.setMaximum(maxValue); 082 } 083 084 /** Set the minimum value of the slider */ 085 public void setMinValue(int minValue) 086 { 087 slider.setMinimum(minValue); 088 } 089 090 /** Set the major tick spacing of the slider */ 091 public void setMajorTickSpacing(int spacing) 092 { 093 this.maxSpacing = spacing; 094 slider.setMajorTickSpacing(spacing); 095 096 } 097 098 /** Set the minor tick spacing of the slider */ 099 public void setMinorTickSpacing(int spacing) 100 { 101 slider.setMinorTickSpacing(spacing); 102 } 103 104 /** Set the factory for the custom labels */ 105 public void setSliderLabelFactory(SliderLabelFactory sliderLabelFactory) 106 { 107 this.sliderLabelFactory = sliderLabelFactory; 108 } 109 110 }