n n n n n Java Beans Enterprise
Существующие компонентные модели n n n n n Java. Beans Enterprise Java. Beans. Net Framework Components Active. X COM DCOM CORBA VLC & CLX … 6
Бин с простым свойством package beans; public class My. Bean implements java. io. Serializable { public My. Bean() { } private String message; public String get. Message() { return message; } public void set. Message(String message) { this. message = message; } } 15
Бин с индексированным свойством public class My. Bean implements java. io. Serializable { private String[] lines = new String[5]; public String[] get. Lines() { return lines; } public void set. Lines(String[] lines) { this. lines = lines; } public String get. Lines(int index) { return lines[index]; } public void set. Lines(int index, String line) { this. lines[index] = line; } } 18
Бин со связанным свойством package beans; import java. beans. Property. Change. Listener; import java. beans. Property. Change. Support; public class My. Bean implements java. io. Serializable { private final Property. Change. Support pcs = new Property. Change. Support(this); public void add. Property. Change. Listener( Property. Change. Listener listener) { pcs. add. Property. Change. Listener(listener); } public void remove. Property. Change. Listener( Property. Change. Listener listener) { pcs. remove. Property. Change. Listener(listener); } 21
Бин со связанным свойством public void set. Message(String message) { String old = this. message; this. message = message; pcs. fire. Property. Change("message", old, message); } public void set. Lines(String[] lines) { String[] old = this. lines; this. lines = lines; pcs. fire. Property. Change("lines", old, lines); } public void set. Lines(int index, String line) { String old = this. lines[index]; this. lines[index] = line; pcs. fire. Indexed. Property. Change("lines", index, old, lines); }. . . 23
Бин с контролируемым свойством package beans; import java. beans. Property. Veto. Exception; import java. beans. Vetoable. Change. Listener; import java. beans. Vetoable. Change. Support; . . . public class My. Bean implements java. io. Serializable { private final Vetoable. Change. Support vcs = new Vetoable. Change. Support(this); public void add. Vetoable. Change. Listener( Vetoable. Change. Listener listener) { vcs. add. Vetoable. Change. Listener(listener); } public void remove. Vetoable. Change. Listener( Vetoable. Change. Listener listener) { vcs. remove. Vetoable. Change. Listener( listener ); } 25
Бин с контролируемым свойством. . . public void set. Message(String message) { String old = this. message; try { vcs. fire. Vetoable. Change("message", old, message); this. message = message; pcs. fire. Property. Change("message", old, message); } catch (Property. Veto. Exception e) { this. message = old; } }. . . } 26
Графический бин package beans; import java. beans. *; import javax. swing. *; import java. awt. *; public class My. Bean extends JComponent implements java. io. Serializable { protected void paint. Component(Graphics g) { g. set. Color(get. Foreground()); int height = g. get. Font. Metrics(). get. Height(); if (message != null) { g. draw. String(message, 0, height); } }. . . 28
Графический бин. . . public void set. Message(String message) { String old = this. message; try { vcs. fire. Vetoable. Change("message", old, message); this. message = message; pcs. fire. Property. Change("message", old, message); repaint(); } catch (Property. Veto. Exception e) { this. message = old; } }. . . } 29
Синтаксически корректный код class My. First. Class { public static void main(String[] args) { //. . . } class My. Second. Class { private int a, b; public My. Second. Class(int a, int b) { this. a = a; this. b = b; } //. . . } } 45
Пример внутреннего класса class Class. A { private int a = 10; protected class Class. B { private int b = 15; public int get. A() { return a; } public int get. B() { return b; } } public Class. B get() { return new Class. B(); } public void set. B(int b, Class. B obj) { obj. b = b; } } public class Test { public static void main(String[] args) { Class. A obj. A = new Class. A(); Class. A. Class. B obj. B = obj. A. get(); obj. A. set. B(20, obj. B); System. out. println(obj. B. get. A() + " " + obj. B. get. B()); } } 50
И ещё один пример import java. io. *; interface Interface extends Serializable { int get. A(); } class Class. A implements Serializable { private class Class. B implements Interface { private int a; public int get. A() { return a; } } private Class. B[] arr = new Class. B[10]; { for(int i = 0; i < 10; i++) { arr[i] = new Class. B(); arr[i]. a = i + 65; } } public Interface get. B(int index) { return arr[index]; } } 51
И его результат… public class Test { public static void main(String[] args) throws Exception { Class. A obj. A = new Class. A(); Interface obj. B = obj. A. get. B(5); Object. Output. Stream out = new Object. Output. Stream( new File. Output. Stream("test. bin")); out. write. Object(obj. B); out. close(); } } ¬н ♣sr ♪Class. A$Class. Bиe. ТнwјЛ☻ ☻I ☺a. L ♠this$0 t ◘LClass. A; xp Fsr ♠Class. AhќЯѓэЄрЈ ☻ ☺[♥arrt ►[LClass. A$Class. B; xpur ►[LClass. A$Class. B; єВ 2 ♂т| Ў☻ xp sq ~ Aq ~ ♣sq ~ Bq ~ ♣sq ~ Cq ~ ♣sq ~ Dq ~ ♣sq ~ Eq ~ ♣q ~ ☻sq ~ Gq ~ ♣sq ~ Hq ~ ♣sq ~ Iq ~ ♣sq ~ Jq ~ ♣ 52
Пример анонимного класса import java. awt. *; import javax. swing. *; public class My. Applet extends JApplet {. . . public void init() { JButton btn = new JButton("? "); get. Content. Pane(). add(btn); btn. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { ((JButton)e. get. Source()). set. Text("!"); } } 55
- Slides: 58