Scala #049: EditDone
■ テキストを入力する
22: val textField = new TextField(20) { 23: Command.listenTo(this) 24: }
テキストを入力すると、Command が TextField に呼応します。
47: object Command extends Publisher { 48: reactions += { 49: case EditDone(source) => 50: val text = source.text 51: textArea.append("%s\n" format text) 52: textField.selectAll 53: textArea.caret.position = textArea.peer.getDocument().getLength() 54: } 55: }enter キーを入力すると、イベント EditDone が発生するので、それに反応する処理を記述します。
■ scala.swing.TextComponent
34 class TextComponent extends Component with Publisher {
35 override lazy val peer: JTextComponent = new JTextComponent with SuperMixin {}
36 def text: String = peer.getText
37 def text_=(t: String) = peer.setText(t)
38
39 class Caret extends Publisher {
40 def dot: Int = peer.getCaret.getDot
41 def dot_=(n: Int) { peer.getCaret.setDot(n) }
42 def mark: Int = peer.getCaret.getMark
43 def moveDot(n: Int) { peer.getCaret.moveDot(n) }
44 def visible: Boolean = peer.getCaret.isVisible
45 def visible_=(b: Boolean) { peer.getCaret.setVisible(b) }
46 def selectionVisible: Boolean = peer.getCaret.isSelectionVisible
47 def selectionVisible_=(b: Boolean) { peer.getCaret.setSelectionVisible(b) }
48 def blinkRate: Int = peer.getCaret.getBlinkRate
49 def blinkRate_=(n: Int) { peer.getCaret.setBlinkRate(n) }
50 def color: Color = peer.getCaretColor
51 def color_=(c: Color) = peer.setCaretColor(c)
52 def position: Int = peer.getCaretPosition
53 def position_=(p: Int) = peer.setCaretPosition(p)
54
55 peer.addCaretListener {
56 new CaretListener {
57 def caretUpdate(e: CaretEvent) { publish(CaretUpdate(TextComponent.this)) }
58 }
59 }
60 }
61
62 object caret extends Caret
63
64 def editable: Boolean = peer.isEditable
65 def editable_=(x: Boolean) = peer.setEditable(x)
66 def cut() { peer.cut() }
67 def copy() { peer.copy() }
68 def paste() { peer.paste() }
69 def selected: String = peer.getSelectedText
70
71 def selectAll() { peer.selectAll() }
72
73 peer.getDocument.addDocumentListener(new DocumentListener {
74 def changedUpdate(e:DocumentEvent) { publish(new ValueChanged(TextComponent.this)) }
75 def insertUpdate(e:DocumentEvent) { publish(new ValueChanged(TextComponent.this)) }
76 def removeUpdate(e:DocumentEvent) { publish(new ValueChanged(TextComponent.this)) }
77 })
78 }
■ scala.swing.TextField
32 class TextField(text0: String, columns0: Int) extends TextComponent with TextComponent.HasColumns with Action.Trigger.Wrapper { 33 override lazy val peer: JTextField = new JTextField(text0, columns0) with SuperMixin 34 def this(text: String) = this(text, 0) 35 def this(columns: Int) = this("", columns) 36 def this() = this("") 37 38 def columns: Int = peer.getColumns 39 def columns_=(n: Int) = peer.setColumns(n) 40 41 /** @see javax.swing.JTextField#getHorizontalAlignment() */ 42 def horizontalAlignment: Alignment.Value = Alignment(peer.getHorizontalAlignment) 43 /** @see javax.swing.JTextField#setHorizontalAlignment() */ 44 def horizontalAlignment_=(x: Alignment.Value) { peer.setHorizontalAlignment(x.id) } 45 46 private lazy val actionListener = Swing.ActionListener { e => 47 publish(EditDone(TextField.this)) 48 }
■ scala.swing.Swing
21 object Swing {
...
36 final def ActionListener(f: ActionEvent => Unit) = new ActionListener {
37 def actionPerformed(e: ActionEvent) { f(e) }
38 }
■ scala.swing.event.EditDone
14 case class EditDone(override val source: TextField) extends ValueChanged(source)