/
App.scala
112 lines (93 loc) · 3.33 KB
/
App.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*§
===========================================================================
Magellan
===========================================================================
Copyright (C) 2016 Gianluca Costa
===========================================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
===========================================================================
*/
package info.gianlucacosta.clustering.magellan.appclient
import javafx.application.Application
import javafx.beans.property.SimpleIntegerProperty
import javafx.beans.value.{ChangeListener, ObservableValue}
import javafx.stage.Stage
import info.gianlucacosta.clustering.magellan.appclient.ExceptionUtils._
import scalafx.Includes._
import scalafx.event.ActionEvent
import scalafx.geometry.{Insets, Pos}
import scalafx.scene.Scene
import scalafx.scene.control.{Button, Label}
import scalafx.scene.layout.{HBox, VBox}
object App {
def main(args: Array[String]) {
/*
This overloaded version of Application.launch() is especially suitable for ScalaFX
*/
Application.launch(classOf[App], args: _*)
}
}
class App extends Application {
override def start(primaryStage: Stage): Unit = {
val counterLabel = new Label {
text = "Click a button to connect to the EJB"
}
val counterValue = new SimpleIntegerProperty(0)
/*
Whenever the model changes, the label is updated
*/
counterValue.addListener(new ChangeListener[Number] {
override def changed(observable: ObservableValue[_ <: Number], oldValue: Number, newValue: Number): Unit = {
counterLabel.text = s"Counter value: ${counterValue.get()}"
}
})
/*
This is an example of ScalaFX's simple and elegant declarative style
for the creation og UIs
*/
val scene = new Scene {
root = new VBox {
padding = Insets(30)
spacing = 20
children = Seq(
counterLabel,
new HBox {
spacing = 20
alignment = Pos.Center
children = Seq(
new Button("Get value") {
onAction = (eventHandler: ActionEvent) => {
handleExceptions {
CounterBeanService.increase()
counterValue.set(CounterBeanService.getValue)
}
}
},
new Button("Reset") {
onAction = (eventHandler: ActionEvent) => {
handleExceptions {
CounterBeanService.reset()
counterValue.set(CounterBeanService.getValue)
}
}
}
)
}
)
}
}
primaryStage.resizable = false
primaryStage.title = "Magellan - EJB Client"
primaryStage.setScene(scene)
primaryStage.centerOnScreen()
primaryStage.show()
}
}