import java.awt.*; import java.awt.event.*; public class ControlPanel extends Panel { private ControlValue HH; private ControlValue bN; private ControlValue nnGW; private ControlValue Bmax; private Reactor parent; ControlPanel(Reactor up) {parent = up; setLayout(new GridLayout(0,1)); setBackground(new Color(0.7F,0.8F,0.7F)); HH = new ControlValue(parent, "HH", 0.0, 2.0, 1.0); add(HH); bN = new ControlValue(parent, "betaN", 0.0, 10.0, 2.2); add(bN); nnGW = new ControlValue(parent, "nnGW", 0.0, 3.0, 1.15); add(nnGW); Bmax = new ControlValue(parent, "Bmax", 5.0, 20.0, 12.5); add(Bmax); } public Insets getInsets() {return new Insets(10,10,10,10);} public double getHH() {return HH.getVal();} public double getbN() {return bN.getVal();} public double getnnGW() {return nnGW.getVal();} public double getBmax() {return Bmax.getVal();} } class ControlValue extends Panel { private final int RANGE=100; CustomScrollbar scroll; TextField txt; double scrollMin, scrollMax, scrollRef; double value; Reactor parent; public double getVal() { return value;} void handleText(String st) {if(st.equals("")) st = "0."; Double d; d = new Double(st); value = d.doubleValue(); //txt.setText(String.valueOf(value)); scroll.setValue(double2int(value)); } void handleScroll(int v) {value = int2double(v); txt.setText(String.valueOf(value)); } double clean(double val) {return(Math.floor(val*1000.)/1000.);} double int2double(int val) {double ret = (double)val / RANGE * (scrollMax - scrollMin) + scrollMin; return(clean(ret));} int double2int(double ref) {int v = ((int)(RANGE * (ref - scrollMin) / (scrollMax - scrollMin))); if(v < 0) v= 0; if(v> RANGE) v=RANGE; return(v); } ControlValue(Reactor up, String name, double min, double max, double ref) {parent = up; scrollMin = min; scrollMax = max; scrollRef = ref; GridLayout g1 = new GridLayout(2,1); setLayout(new GridLayout(2,1)); Panel pan = new Panel(); add(pan); pan.setLayout(new GridLayout(1,2)); pan.add(new Label(name)); txt = new TextField(String.valueOf(ref),6); txt.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ String v = ((TextField)e.getSource()).getText(); parent.debug = v; parent.repaint(); handleText(v); } }); pan.add(txt); scroll = new CustomScrollbar(double2int(ref)); scroll.addAdjustmentListener(new AdjustmentListener() { public void adjustmentValueChanged(AdjustmentEvent e) { int v = ((Scrollbar)e.getSource()).getValue(); handleScroll(v); parent.repaint(); } }); add(scroll); value = ref; } public Insets getInsets() { return new Insets(10,10,10,10); } } class CustomScrollbar extends Panel { private final int RANGE = 100; Scrollbar scroll; public void addAdjustmentListener(AdjustmentListener a) {scroll.addAdjustmentListener(a); } public CustomScrollbar(int ref) {setLayout(new GridLayout(1,1)); scroll = new Scrollbar(Scrollbar.HORIZONTAL, ref, 0, 0, RANGE); add(scroll); } public Insets getInsets() { return new Insets(3,0,3,0); } public void setValue(int v) {scroll.setValue(v); } public int getValue() {return(scroll.getValue());} }