рдЕрдм рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдИ рдлреИрд╢рдиреЗрдмрд▓ рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рд╛рджреЗ рдЬрд╛рд╡рд╛ рдореЗрдВ
рдЖрдк рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЖрдк рдЗрд╕реЗ рдЬрд╛рд╡рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдПрдХ рдЬрд╛рд╡рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рджреЗрдЦреЗрдВ
https://code.google.com/p/tee-binding/ )

рдХрдХреНрд╖рд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдИ>
- рдореБрдЦреНрдп рд╡рд░реНрдЧ, рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХрд╛ рд╕рдВрджрд░реНрдн рд░рдЦрддрд╛ рд╣реИ рдФрд░ рд╕рднреА рд╕рдВрдЪрд╛рд░ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдорд╛рди рдмрджрд▓рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг
ItтА╣StringтА║ a1 = new ItтА╣StringтА║().value("A"); ItтА╣StringтА║ a2 = new ItтА╣StringтА║().value("B"); System.out.println("a1: "+a1.value()+", a2: "+a2.value()); a1.bind(a2); System.out.println("a1: "+a1.value()+", a2: "+a2.value()); a1.value("C"); System.out.println("a1: "+a1.value()+", a2: "+a2.value()); a2.value("D"); System.out.println("a1: "+a1.value()+", a2: "+a2.value());
рдкрд░рд┐рдгрд╛рдо:
a1: A, a2: B a1: B, a2: B a1: C, a2: C a1: D, a2: D
рд╕рдВрдЦреНрдпрд╛, рдиреЛрдЯ, рдЯреЙрдЧрд▓ рдХрдХреНрд╖рд╛рдПрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ (рдбрдмрд▓, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдмреВрд▓рд┐рдпрди рдХреЗ рд▓рд┐рдП рдХреНрд░рдорд╢рдГ) рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
Numeric c = new Numeric().value(0); Numeric f = c.multiply(9.0).divide(5.0).plus(32.0); System.out.println("f: " + f.value() + ", c: " + c.value()); System.out.println("/let f = 100 "); f.value(100); System.out.println("f: " + f.value() + ", c: " + c.value()); System.out.println("/let c = 100 "); c.value(100); System.out.println("f: " + f.value() + ", c: " + c.value());
рдкрд░рд┐рдгрд╛рдо:
f: 32.0, c: 0.0 /let f = 100 f: 100.0, c: 37.77777777777778 /let c = 100 f: 212.0, c: 100.0
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рддрд╛рдкрдорд╛рди рдХреЛ рд╕реЗрд▓реНрд╕рд┐рдпрд╕ рдкреИрдорд╛рдиреЗ рд╕реЗ рдлрд╝рд╛рд░реЗрдирд╣рд╛рдЗрдЯ рдкреИрдорд╛рдиреЗ (F '= C' * 9/5 + 32) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред рдПрдХ рдЪрд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ
Numeric f = c.multiply(9.0).divide(5.0).plus(32.0);
рдпрд╣ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрд╣ рднреА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рджреНрд╡рд┐рджрд┐рд╢ рд╣реИред
рдиреЛрдЯ: рдлрд╝рдВрдХреНрд╢рди рдЫрджреНрдо рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЛ рд╕рдВрдЪрд╛рд▓рди рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗ рдмрд┐рдирд╛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИредрдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрд╛рдВрдЯрд╛ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдмрдВрдзрди рдореЗрдВ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
System.out.println("/n = -10"); Numeric n = new Numeric().value(-10); Note r = new Note().bind(new ForkтА╣StringтА║() .condition(new Toggle().less(n, -5)) .then("Frost") .otherwise(new ForkтА╣StringтА║() .condition(new Toggle().less(n, +15)) .then("Cold") .otherwise(new ForkтА╣StringтА║() .condition(new Toggle().less(n, +30)) .then("Warm") .otherwise("Hot") ))); System.out.println(r.value()); System.out.println("/let n = +10"); n.value(10); System.out.println(r.value()); System.out.println("/let n = +20"); n.value(20); System.out.println(r.value()); System.out.println("/let n = +40"); n.value(40); System.out.println(r.value());
рдкрд░рд┐рдгрд╛рдо:
/n = -10 Frost /let n = +10 Cold /let n = +20 Warm /let n = +40 Hot
рдЪрд░ рдПрди рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реНрдерд┐рддрд┐ рд░рд┐рдХреЙрд░реНрдб рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдкрд╛рда рдлреНрд░реЙрд╕реНрдЯ, рдХреЛрд▓реНрдб, рд╡рд╛рд░реНрдо рдпрд╛ рд╣реЙрдЯ рдХреЛ рд╡реЗрд░рд┐рдПрдмрд▓ рдЖрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрд╡реЗрджрди
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмрд╛рдзреНрдпрдХрд╛рд░реА рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реАрдзреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрд╡рд┐рдВрдЧ рдореЗрдВ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
class BindableLabel extends JLabel { private Note bindableValue = new Note().value("").afterChange(new Task() { @Override public void job() { if (bindableValue != null) { setText(bindableValue.value()); } } }); public Note bindableValue() { return bindableValue; } public BindableLabel() { super(); } }
рдпрд╣ рдПрдХ рдорд╛рдирдХ рдЬреЗрд▓рд╛рдмреЗрд▓ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд░реНрдЧ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдиреЛрдЯ рдХреЗ рдПрдХ рдЪрд░ рдХреЗ рд╕рд╛рде рд╕рд╣рдпреЛрдЧреА рд▓реЗрдмрд▓ рдкрд╛рда рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реНрд╡рд┐рдВрдЧ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ ChangeListener рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рдлрд╝реЙрд░реНрдо рд╕реЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
void bindComponents() { Numeric celsius = new Numeric().value(0); Numeric fahrenheit = celsius.multiply(9.0).divide(5.0).plus(32.0); fahrenheitSlider.bindableValue().bind(fahrenheit); fahrenheitSpinner.bindableValue().bind(fahrenheit); celsiusSlider.bindableValue().bind(celsius); celsiusSpinner.bindableValue().bind(celsius);
- рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдкрддреНрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп (рдпрд╛ рдлрд╝рд┐рд╕рд▓рдкрдЯреНрдЯреА рдХреЗ рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реБрдП), рд╢реЗрд╖ рдШрдЯрдХ рддреБрд░рдиреНрдд рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рддреЗ рд╣реИрдВред