topic "U++ vs Java/Swing"; [l288;i704;a17;O9;~~~.992;2 $$1,0#10431211400427159095818037425705:param] [a83;*R6 $$2,5#31310162474203024125188417583966:caption] [b83;*2 $$3,5#07864147445237544204411237157677:title] [b167;a42;C2 $$4,6#40027414424643823182269349404212:item] [b42;a42;ph2 $$5,5#45413000475342174754091244180557:text] [l288;a17;2 $$6,6#27521748481378242620020725143825:desc] [l321;t246;C@5;1 $$7,7#20902679421464641399138805415013:code] [b2503;2 $$8,0#65142375456100023862071332075487:separator] [*@(0.0.255)2 $$9,0#83433469410354161042741608181528:base] [t4167;C2 $$10,0#37138531426314131251341829483380:class] [l288;a17;*1 $$11,11#70004532496200323422659154056402:requirement] [i417;b42;a42;O9;~~~.416;2 $$12,12#10566046415157235020018451313112:tparam] [b167;C2 $$13,13#92430459443460461911108080531343:item1] [i288;a42;O9;C2 $$14,14#77422149456609303542238260500223:item2] [*@2$(0.128.128)2 $$15,15#34511555403152284025741354420178:NewsDate] [l321;*C$7;2 $$16,16#03451589433145915344929335295360:result] [l321;b83;a83;*C$7;2 $$17,17#07531550463529505371228428965313:result`-line] [l160;t4167;*C+117 $$18,5#88603949442205825958800053222425:package`-title] [2 $$0,0#00000000000000000000000000000000:Default] [{_}%EN-US [s2; U`+`+ vs Java/Swing&] [s5; To compare U`+`+ with Java, we found simple Converter example. Note that this example was provided for Java tutorial, so it is perhaps not the best thing to use it for development effectiveness comparison. However, it still might serve well to get first hint about how well U`+`+ does when compared to Java/Swing.&] [s0; &] [ {{4926:5074f0;g0; [s0;= @@image:962&679 (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) ] :: [s0;= @@image:1937&867 (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) ]}}&] [s0; &] [s0; &] [ {{5000:5000h1;@(204)R(178) [s0; [* U`+`+ version]] :: [s0; [* Java/Swing version]] ::^@2R0 [s0; [*C3 Converter.cpp]&] [s0; [C0 #include ]&] [s0;C0 &] [s0; [C0 using namespace Upp;]&] [s0;C0 &] [s0; [C0 #define LAYOUTFILE ]&] [s0; [C0 #include ]&] [s0;C0 &] [s0; [C0 struct ConverterPane : WithConverterPaneLayout `{]&] [s0; [C0 -|ConverterPane `*slave;]&] [s0; [C0 -|void AdjustSlave()]&] [s0; [C0 -|`{]&] [s0; [C0 -|-|slave`->slider <<`= slave`->value <<`=]&] [s0; [C0 -|-|-|IsNull(value) ? 0.0 : (double)`~unit `* (double)`~value / (double)`~slave`->unit;]&] [s0; [C0 -|`}]&] [s0; [C0 -|void ValueChanged()]&] [s0; [C0 -|`{]&] [s0; [C0 -|-|slider <<`= `~value;]&] [s0; [C0 -|-|AdjustSlave();]&] [s0; [C0 -|`}]&] [s0; [C0 -|void SliderChanged()]&] [s0; [C0 -|`{]&] [s0; [C0 -|-|value <<`= `~slider;]&] [s0; [C0 -|-|AdjustSlave();]&] [s0; [C0 -|`}]&] [s0; [C0 -|]&] [s0; [C0 -|typedef ConverterPane CLASSNAME;]&] [s0;C0 &] [s0; [C0 -|ConverterPane()]&] [s0; [C0 -|`{]&] [s0; [C0 -|-|CtrlLayout(`*this);]&] [s0; [C0 -|-|slider.Range(10000);]&] [s0; [C0 -|-|slider <<`= value <<`= 0;]&] [s0; [C0 -|-|value <<`= THISBACK(ValueChanged);]&] [s0; [C0 -|-|slider <<`= THISBACK(SliderChanged);]&] [s0; [C0 -|-|unit <<`= THISBACK(AdjustSlave);]&] [s0; [C0 -|`}]&] [s0; [C0 `};]&] [s0;C0 &] [s0; [C0 struct Converter : TopWindow]&] [s0; [C0 `{]&] [s0; [C0 -|ConverterPane metric, us;]&] [s0;C0 &] [s0; [C0 -|typedef Converter CLASSNAME;]&] [s0;C0 &] [s0; [C0 -|Converter()]&] [s0; [C0 -|`{]&] [s0; [C0 -|-|Title(`"Converter`");]&] [s0; [C0 -|-|Size sz `= metric.GetLayoutSize();]&] [s0; [C0 -|-|SetRect(0, 0, metric.GetSize().cx, metric.GetSize().cy `* 2);]&] [s0; [C0 -|-|Add(metric.HSizePos().TopPos(0, sz.cy));]&] [s0; [C0 -|-|Add(us.HSizePos().BottomPos(0, sz.cy));]&] [s0;C0 &] [s0; [C0 -|-|metric.title `= `"Metric units`";]&] [s0; [C0 -|-|metric.unit.Add(0.01, `"Centimeters`");]&] [s0; [C0 -|-|metric.unit.Add(1.0, `"Meters`");]&] [s0; [C0 -|-|metric.unit.Add(1000.0, `"Kilometers`");]&] [s0; [C0 -|-|metric.unit <<`= 1.0;]&] [s0;C0 &] [s0; [C0 -|-|us.title `= `"U.S. units`";]&] [s0; [C0 -|-|us.unit.Add(0.0254, `"Inches`");]&] [s0; [C0 -|-|us.unit.Add(0.305, `"Feet`");]&] [s0; [C0 -|-|us.unit.Add(0.914, `"Yards`");]&] [s0; [C0 -|-|us.unit.Add(1613.0, `"Miles`");]&] [s0; [C0 -|-|us.unit <<`= 0.305;]&] [s0; [C0 -|-|]&] [s0; [C0 -|-|us.slave `= `&metric;]&] [s0; [C0 -|-|metric.slave `= `&us;]&] [s0; [C0 -|-|]&] [s0; [C0 -|-|metric.AdjustSlave();]&] [s0; [C0 -|`}]&] [s0; [C0 `};]&] [s0;C0 &] [s0; [C0 GUI`_APP`_MAIN]&] [s0; [C0 `{]&] [s0; [C0 -|Converter().Run();]&] [s0; [C0 `}]&] [s0;C0 &] [s0; [*C3 converter.lay][C0 ][C1 (designed using visual tool)]&] [s0; [C0 #ifdef LAYOUTFILE]&] [s0;C0 &] [s0; [C0 LAYOUT(ConverterPaneLayout, 244, 76)]&] [s0; [C0 -|ITEM(LabelBox, title, LeftPosZ(8, 228).TopPosZ(4, 64))]&] [s0; [C0 -|ITEM(EditDoubleSpin, value, LeftPosZ(16, 144).TopPosZ(20, 19))]&] [s0; [C0 -|ITEM(SliderCtrl, slider, LeftPosZ(16, 144).TopPosZ(40, 20))]&] [s0; [C0 -|ITEM(DropList, unit, LeftPosZ(164, 64).TopPosZ(20, 19))]&] [s0; [C0 END`_LAYOUT]&] [s0;C0 &] [s0; [C0 #endif]&] [s0; ] :: [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [*C3 Converter.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.event.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.awt.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.awt.event.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.util.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class Converter `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ConversionPanel metricPanel, usaPanel;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Unit`[`] metricDistances `= new Unit`[3`];]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Unit`[`] usaDistances `= new Unit`[4`];]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ConverterRangeModel dataModel `= new ConverterRangeModel();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 JPanel mainPane;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public Converter() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 metricDistances`[0`] `= new Unit(`"Centimeters`", 0.01);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 metricDistances`[1`] `= new Unit(`"Meters`", 1.0);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 metricDistances`[2`] `= new Unit(`"Kilometers`", 1000.0);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 metricPanel `= new ConversionPanel(this, `"Metric System`",]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 metricDistances,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 usaDistances`[0`] `= new Unit(`"Inches`", 0.0254);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 usaDistances`[1`] `= new Unit(`"Feet`", 0.305);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 usaDistances`[2`] `= new Unit(`"Yards`", 0.914);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 usaDistances`[3`] `= new Unit(`"Miles`", 1613.0);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 usaPanel `= new ConversionPanel(this, `"U.S. System`",]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 usaDistances,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 new FollowerRangeModel(dataModel));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 mainPane `= new JPanel();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 mainPane.setLayout(new GridLayout(2,1,5,5));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 mainPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 mainPane.add(metricPanel);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 mainPane.add(usaPanel);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 resetMaxValues(true);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void resetMaxValues(boolean resetCurrentValues) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 double metricMultiplier `= metricPanel.getMultiplier();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 double usaMultiplier `= usaPanel.getMultiplier();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int maximum `= ConversionPanel.MAX;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (metricMultiplier > usaMultiplier) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 maximum `= (int)(ConversionPanel.MAX `*]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 (usaMultiplier/metricMultiplier));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel.setMaximum(maximum);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (resetCurrentValues) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel.setDoubleValue(maximum);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public static void main(String`[`] args) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Converter converter `= new Converter();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 JFrame f `= new JFrame(`"Converter`");]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 f.addWindowListener(new WindowAdapter() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void windowClosing(WindowEvent e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.exit(0);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `});]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 f.setContentPane(converter.mainPane);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;C0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 f.pack();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 f.setVisible(true);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0;C &] [s0; &] [s0;%- [*C3 ConversionPanel.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.event.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.awt.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.awt.event.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.util.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.text.NumberForma t;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class ConversionPanel extends JPanel `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 DecimalField textField;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 JComboBox unitChooser;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 JSlider slider;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ConverterRangeModel sliderModel;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Converter controller;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Unit`[`] units;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String title;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 final static int MAX `= 10000;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ConversionPanel(Converte r myController, String myTitle, ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Unit`[`] myUnits,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ConverterRangeModel myModel) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setBorder(BorderFactory.createCompoundBorder(]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 BorderFactory.createTitledBorder(myTitle),]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 BorderFactory.createEmptyBorder(5,5,5,5)));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 controller `= myController;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 units `= myUnits;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 title `= myTitle;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 sliderModel `= myModel;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 NumberFormat numberFormat `= NumberFormat.getNumberInstance();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 numberFormat.setMaximumFractionDigits(2);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 textField `= new DecimalField(0, 10, numberFormat); ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 textField.setValue(sliderModel.getDoubleValue());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 textField.addActionListener(new ActionListener() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void actionPerformed(ActionEvent e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 sliderModel.setDoubleValue(textField.getValue());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `});]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitChooser `= new JComboBox(); ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 for (int i `= 0; i < units.length; i`+`+) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitChooser.addItem(units`[i`].description);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitChooser.setSelectedIndex(0);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 sliderModel.setMultiplier(units`[0`].multiplier);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitChooser.addActionListener(new ActionListener() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void actionPerformed(ActionEvent e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int i `= unitChooser.getSelectedIndex();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 sliderModel.setMultiplier(units`[i`].multiplier);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 controller.resetMaxValues(false);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `});]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 slider `= new JSlider(sliderModel);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 sliderModel.addChangeListener(new ChangeListener() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void stateChanged(ChangeEvent e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 textField.setValue(sliderModel.getDoubleValue());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `});]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 JPanel unitGroup `= new JPanel() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public Dimension getMinimumSize() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return getPreferredSize();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public Dimension getPreferredSize() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return new Dimension(150, ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 super.getPreferredSize().height);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public Dimension getMaximumSize() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return getPreferredSize();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `};]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitGroup.setBorder(BorderFactory.createEmptyBorder(]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 0,0,0,5));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitGroup.setLayout(new BoxLayout(unitGroup, ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 BoxLayout.Y`_AXIS));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitGroup.add(textField);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitGroup.add(slider);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setLayout(new BoxLayout(this, BoxLayout.X`_AXIS));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 add(unitGroup);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 add(unitChooser);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitGroup.setAlignmentY(TOP`_ALIGNMENT);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 unitChooser.setAlignmentY(TOP`_ALIGNMENT);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public double getMultiplier() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return sliderModel.getMultiplier();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public double getValue() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return sliderModel.getDoubleValue();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0; &] [s0;%- [*C3 ConverterRangeModel.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.event.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class ConverterRangeModel implements BoundedRangeModel `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected ChangeEvent changeEvent `= null;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected EventListenerList listenerList `= new EventListenerList();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected int maximum `= 10000;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected int minimum `= 0;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected int extent `= 0;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected double value `= 0.0;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected double multiplier `= 1.0;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected boolean isAdjusting `= false;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;C0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public ConverterRangeModel() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public double getMultiplier() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setMultiplier(double multiplier) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 this.multiplier `= multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 fireStateChanged();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getMaximum() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return maximum;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setMaximum(int newMaximum) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setRangeProperties(value, extent, minimum, newMaximum, isAdjusting);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getMinimum() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return (int)minimum;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setMinimum(int newMinimum) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.out.println(`"In ConverterRangeModel setMinimum`");]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getValue() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return (int)getDoubleValue();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setValue(int newValue) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setDoubleValue((double)newValue);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public double getDoubleValue() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return value;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setDoubleValue(double newValue) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setRangeProperties(newValue, extent, minimum, maximum, isAdjusting);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getExtent() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return (int)extent;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setExtent(int newExtent) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public boolean getValueIsAdjusting() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return isAdjusting;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setValueIsAdjusting(boolean b) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setRangeProperties(value, extent, minimum, maximum, b);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setRangeProperties(int newValue,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int newExtent,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int newMin,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int newMax,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 boolean newAdjusting) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.out.println(`"In ConverterRangeModel setRangeProperties`");]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setRangeProperties((double)newValue,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newExtent,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newMin,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newMax,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newAdjusting);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setRangeProperties(double newValue,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int unusedExtent,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int unusedMin,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int newMax,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 boolean newAdjusting) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (newMax <`= minimum) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newMax `= minimum `+ 1;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (DEBUG) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.out.println(`"maximum raised by 1 to `" `+ newMax);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (Math.round(newValue) > newMax) `{ //allow some rounding error]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newValue `= newMax;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 boolean changeOccurred `= false;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (newValue !`= value) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 value `= newValue;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 changeOccurred `= true;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (newMax !`= maximum) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 maximum `= newMax;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 changeOccurred `= true;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (newAdjusting !`= isAdjusting) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 maximum `= newMax;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 isAdjusting `= newAdjusting;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 changeOccurred `= true;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (changeOccurred) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 fireStateChanged();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 /`* ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `* The rest of this is event handling code copied from ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `* DefaultBoundedRangeModel. ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `*/]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void addChangeListener(ChangeListener l) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 listenerList.add(ChangeListener.class, l);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void removeChangeListener(ChangeListener l) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 listenerList.remove(ChangeListener.class, l);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 protected void fireStateChanged() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Object`[`] listeners `= listenerList.getListenerList();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 for (int i `= listeners.length `- 2; i >`= 0; i `-`=2 ) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (listeners`[i`] `=`= ChangeListener.class) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (changeEvent `=`= null) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 changeEvent `= new ChangeEvent(this);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ((ChangeListener)listeners`[i`+1`]).stateChanged(changeEvent);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0;*C3 &] [s0;%- [*C3 DecimalField.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.text.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.awt.Toolkit;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.text.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class DecimalField extends JTextField `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 private NumberFormat format;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public DecimalField(double value, int columns, NumberFormat f) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 super(columns);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setDocument(new FormattedDocument(f));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 format `= f;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setValue(value);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public double getValue() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 double retVal `= 0.0;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 try `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 retVal `= format.parse(getText()).doubleValue();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `} catch (ParseException e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Toolkit.getDefaultToolkit().beep();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.err.println(`"getValue: could not parse: `" `+ getText());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return retVal;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setValue(double value) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setText(format.format(value));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0;C &] [s0;%- [*C3 FollowerRangeModel.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.event.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class FollowerRangeModel extends ConverterRangeModel]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 implements ChangeListener `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 ConverterRangeModel dataModel;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public FollowerRangeModel(ConverterRangeModel dataModel) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 this.dataModel `= dataModel;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel.addChangeListener(this);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void stateChanged(ChangeEvent e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 fireStateChanged();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getMaximum() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int modelMax `= dataModel.getMaximum();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 double multiplyBy `= dataModel.getMultiplier()/multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return (int)(modelMax `* multiplyBy);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setMaximum(int newMaximum) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel.setMaximum((int)(newMaximum `* ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 (multiplier/dataModel.getMultiplier())));]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getValue() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return (int)getDoubleValue();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setValue(int newValue) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 setDoubleValue((double)newValue);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public double getDoubleValue() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return dataModel.getDoubleValue()]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `* dataModel.getMultiplier()]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 / multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setDoubleValue(double newValue) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel.setDoubleValue(]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 newValue `* multiplier]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 / dataModel.getMultiplier());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public int getExtent() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return super.getExtent();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setExtent(int newExtent) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 super.setExtent(newExtent);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void setRangeProperties(int value,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int extent,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int min,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 int max,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 boolean adjusting) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 double multiplyBy `= multiplier/dataModel.getMultiplier();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 dataModel.setRangeProperties(value`*multiplyBy,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 extent, min, ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 (int)(max`*multiplyBy),]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 adjusting);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0;*C3 &] [s0;%- [*C3 FormattedDocument.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import javax.swing.text.`*; ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.awt.Toolkit;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.text.`*;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 import java.util.Locale;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class FormattedDocument extends PlainDocument `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 private Format format;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public FormattedDocument(Format f) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 format `= f;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public Format getFormat() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return format;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void insertString(int offs, String str, AttributeSet a) ]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 throws BadLocationException `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String currentText `= getText(0, getLength());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String beforeOffset `= currentText.substring(0, offs);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String afterOffset `= currentText.substring(offs, currentText.length());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String proposedResult `= beforeOffset `+ str `+ afterOffset;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 try `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 format.parseObject(proposedResult);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 super.insertString(offs, str, a);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `} catch (ParseException e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Toolkit.getDefaultToolkit().beep();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.err.println(`"insertString: could not parse: `"]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `+ proposedResult);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public void remove(int offs, int len) throws BadLocationException `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String currentText `= getText(0, getLength());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String beforeOffset `= currentText.substring(0, offs);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String afterOffset `= currentText.substring(len `+ offs,]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 currentText.length());]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String proposedResult `= beforeOffset `+ afterOffset;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 try `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 if (proposedResult.length() !`= 0)]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 format.parseObject(proposedResult);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 super.remove(offs, len);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `} catch (ParseException e) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Toolkit.getDefaultToolkit().beep();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 System.err.println(`"remove: could not parse: `" `+ proposedResult);]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0;C &] [s0;%- [*C3 Unit.java]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public class Unit `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String description;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 double multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 Unit(String description, double multiplier) `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 super();]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 this.description `= description;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 this.multiplier `= multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;0 &] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 public String toString() `{]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 String s `= `"Meters/`" `+ description `+ `" `= `" `+ multiplier;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 return s;]&] [s0;~~~0~400~799~1199~1598~1998~2398~2797~3197~3596;%- [C0 `}]&] [s0;%- [C0 `}]&] [s0;C ]}}&] [s0; &] [s3; References&] [s5;l160;i150;O0; [/ http://www.ictp.trieste.it/`~manuals/programming/Java/tutorial/uisw ing/overview/anatomy.html] `- original Java source code of Converter, currently unavailable (2019)]]