Commit f15a5890729eeb12d748b54d5809fc69dbd30a2c
1 parent
513c0341c5
Exists in
master
and in
1 other branch
add better chart
Showing 6 changed files with 173 additions and 119 deletions Side-by-side Diff
build.gradle
View file @
f15a589
... | ... | @@ -8,6 +8,9 @@ |
8 | 8 | |
9 | 9 | repositories { |
10 | 10 | mavenCentral() |
11 | + maven { | |
12 | + url "https://jitpack.io" | |
13 | + } | |
11 | 14 | } |
12 | 15 | |
13 | 16 | dependencies { |
... | ... | @@ -17,6 +20,7 @@ |
17 | 20 | testCompile group: 'junit', name: 'junit', version: '4.12' |
18 | 21 | testCompile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' |
19 | 22 | compile group: 'ch.qos.logback', name: 'logback-core', version: '1.2.3' |
23 | + compile 'com.github.jasrodis:javafx-dataviewer-wrapper:-SNAPSHOT' | |
20 | 24 | } |
21 | 25 | |
22 | 26 | compileKotlin { |
src/main/kotlin/application/App.kt
View file @
f15a589
1 | 1 | package application |
2 | 2 | |
3 | 3 | import javafx.application.Application |
4 | +import javafx.application.Platform | |
5 | +import javafx.event.EventHandler | |
4 | 6 | import javafx.fxml.FXMLLoader |
5 | 7 | import javafx.scene.Parent |
6 | 8 | import javafx.scene.Scene |
7 | 9 | import javafx.stage.Stage |
10 | +import javafx.stage.WindowEvent | |
8 | 11 | import jfxtras.styles.jmetro.JMetro |
9 | 12 | import jfxtras.styles.jmetro.Style |
13 | +import kotlin.system.exitProcess | |
10 | 14 | |
11 | 15 | class App : Application() { |
12 | 16 | var style : Style = Style.LIGHT |
13 | 17 | |
... | ... | @@ -19,7 +23,13 @@ |
19 | 23 | JMetro(scene, style) |
20 | 24 | primaryStage!!.scene = scene |
21 | 25 | primaryStage.title = "Maritime Visualisation" |
26 | + primaryStage.onCloseRequest = EventHandler { closeApplication() } | |
22 | 27 | primaryStage.show() |
28 | + } | |
29 | + | |
30 | + private fun closeApplication() { | |
31 | + Platform.exit() | |
32 | + exitProcess(0) | |
23 | 33 | } |
24 | 34 | |
25 | 35 | companion object { |
src/main/kotlin/application/controller/DataPanelController.kt
View file @
f15a589
... | ... | @@ -5,13 +5,17 @@ |
5 | 5 | import javafx.collections.ObservableList |
6 | 6 | import javafx.fxml.FXML |
7 | 7 | import javafx.fxml.Initializable |
8 | -import javafx.scene.chart.CategoryAxis | |
9 | -import javafx.scene.chart.NumberAxis | |
10 | -import javafx.scene.chart.ScatterChart | |
11 | -import javafx.scene.chart.XYChart.Data | |
12 | -import javafx.scene.chart.XYChart.Series | |
13 | 8 | import javafx.scene.control.ListCell |
14 | 9 | import javafx.scene.control.ListView |
10 | +import javafx.scene.layout.StackPane | |
11 | +import org.charts.dataviewer.api.config.DataViewerConfiguration | |
12 | +import org.charts.dataviewer.api.data.PlotData | |
13 | +import org.charts.dataviewer.api.trace.LineTrace | |
14 | +import org.charts.dataviewer.api.trace.ScatterTrace | |
15 | +import org.charts.dataviewer.javafx.JavaFxDataViewer | |
16 | +import org.charts.dataviewer.utils.TraceColour | |
17 | +import org.charts.dataviewer.utils.TraceMode | |
18 | +import org.charts.dataviewer.utils.TraceVisibility | |
15 | 19 | import java.net.URL |
16 | 20 | import java.util.* |
17 | 21 | |
18 | 22 | |
19 | 23 | |
20 | 24 | |
21 | 25 | |
22 | 26 | |
23 | 27 | |
... | ... | @@ -20,36 +24,48 @@ |
20 | 24 | private var dataList: ObservableList<Pair<String, ArrayList<MessageData?>>> = FXCollections.observableArrayList() |
21 | 25 | private lateinit var timeData: ArrayList<MessageData?> |
22 | 26 | |
27 | + | |
23 | 28 | @FXML |
24 | 29 | var dataListView = ListView<Pair<String, ArrayList<MessageData?>>>() |
25 | 30 | |
26 | - @FXML | |
27 | - var xaxisNumber: CategoryAxis = CategoryAxis() | |
31 | +// @FXML | |
32 | +// var stackPanePlot = StackPane() | |
28 | 33 | |
29 | 34 | @FXML |
30 | - var yaxisNumber: NumberAxis = NumberAxis() | |
35 | + var dataViewer = JavaFxDataViewer() | |
31 | 36 | |
32 | - @FXML | |
33 | - lateinit var scatterChartNumber: ScatterChart<String, Number> | |
37 | +// @FXML | |
38 | +// var xaxisNumber: CategoryAxis = CategoryAxis() | |
39 | +// | |
40 | +// @FXML | |
41 | +// var yaxisNumber: NumberAxis = NumberAxis() | |
42 | +// | |
43 | +// @FXML | |
44 | +// lateinit var scatterChartNumber: ScatterChart<String, Number> | |
45 | +// | |
46 | +// @FXML | |
47 | +// var xaxisCategory: CategoryAxis = CategoryAxis() | |
48 | +// | |
49 | +// @FXML | |
50 | +// var yaxisCategory: CategoryAxis = CategoryAxis() | |
51 | +// | |
52 | +// @FXML | |
53 | +// lateinit var scatterChartCategory: ScatterChart<String, String> | |
34 | 54 | |
35 | - @FXML | |
36 | - var xaxisCategory: CategoryAxis = CategoryAxis() | |
37 | - | |
38 | - @FXML | |
39 | - var yaxisCategory: CategoryAxis = CategoryAxis() | |
40 | - | |
41 | - @FXML | |
42 | - lateinit var scatterChartCategory: ScatterChart<String, String> | |
43 | - | |
44 | 55 | override fun initialize(location: URL?, resources: ResourceBundle?) { |
45 | - xaxisNumber.animated = false | |
46 | - yaxisNumber.animated = false | |
47 | - xaxisCategory.animated = false | |
48 | - yaxisCategory.animated = false | |
56 | +// xaxisNumber.animated = false | |
57 | +// yaxisNumber.animated = false | |
58 | +// xaxisCategory.animated = false | |
59 | +// yaxisCategory.animated = false | |
49 | 60 | setObservableSelectedVesselListener() |
50 | 61 | dataListView.items = dataList |
51 | 62 | |
52 | 63 | |
64 | + val plotData = PlotData() | |
65 | + plotData.addTrace(createScatterTrace()) | |
66 | + val config = DataViewerConfiguration() | |
67 | + config.showLegend(true) | |
68 | + config.setLegendInsidePlot(false) | |
53 | 69 | |
54 | 70 | dataListView.setCellFactory { |
55 | 71 | object : ListCell<Pair<String, ArrayList<MessageData?>>?>() { |
56 | 72 | |
57 | 73 | |
58 | 74 | |
59 | 75 | |
60 | 76 | |
61 | 77 | |
62 | 78 | |
63 | 79 | |
64 | 80 | |
65 | 81 | |
66 | 82 | |
67 | 83 | |
... | ... | @@ -65,61 +81,104 @@ |
65 | 81 | } |
66 | 82 | |
67 | 83 | dataListView.selectionModel.selectedItemProperty().addListener { _, _, newValue -> |
68 | - if (newValue == null){ | |
69 | - scatterChartCategory.data.clear() | |
70 | - scatterChartNumber.data.clear() | |
84 | + if (newValue == null) { | |
85 | + plotData.allTraces.clear() | |
86 | + config.setxAxisTitle("") | |
87 | + config.setyAxisTitle("") | |
88 | + dataViewer.resetPlot() | |
89 | + | |
71 | 90 | return@addListener |
72 | 91 | } |
73 | - val serieNumber = Series<String, Number>() | |
74 | - val serieString = Series<String, String>() | |
75 | 92 | |
76 | 93 | val getValueVisitorX = GetValueVisitor() |
77 | 94 | val getValueVisitorY = GetValueVisitor() |
78 | 95 | |
96 | + val arrayListStringX = arrayListOf<String>() | |
97 | + val arrayListDoubleX = arrayListOf<Double>() | |
98 | + val arrayListStringY = arrayListOf<String>() | |
99 | + val arrayListDoubleY = arrayListOf<Double>() | |
79 | 100 | |
80 | - for (x in 0 until newValue?.second?.size!!) { | |
101 | + for (x in 0 until newValue.second.size) { | |
81 | 102 | timeData[x]?.accept(getValueVisitorX) |
82 | 103 | newValue.second[x]?.accept(getValueVisitorY) |
83 | 104 | |
84 | - if (getValueVisitorY.value.toDoubleOrNull() == null){ | |
85 | - serieString.data.add(Data<String, String>(getValueVisitorX.value, getValueVisitorY.value)) | |
86 | - } else{ | |
87 | - serieNumber.data.add(Data<String, Number>(getValueVisitorX.value, getValueVisitorY.value.toDouble())) | |
105 | + if (getValueVisitorY.value.toDoubleOrNull() == null) { | |
106 | + arrayListStringX.add(getValueVisitorX.value) | |
107 | + arrayListStringY.add(getValueVisitorY.value) | |
108 | + } else { | |
109 | + arrayListStringX.add(getValueVisitorX.value) | |
110 | + arrayListDoubleY.add(getValueVisitorY.value.toDouble()) | |
88 | 111 | } |
89 | - | |
90 | 112 | } |
91 | 113 | |
92 | - scatterChartNumber.data.clear() | |
93 | - scatterChartCategory.data.clear() | |
114 | + val scatterTrace = ScatterTrace<Any>() | |
115 | + scatterTrace.traceColour = TraceColour.RED | |
116 | + scatterTrace.traceVisibility = TraceVisibility.TRUE | |
94 | 117 | |
95 | - if (getValueVisitorY.value.toDoubleOrNull() == null){ | |
96 | - serieString.data.add(Data<String, String>(getValueVisitorX.value, getValueVisitorY.value)) | |
97 | - scatterChartCategory.data.addAll(serieString) | |
98 | - setChartCategoryVisible() | |
99 | - xaxisCategory.label = "Date" | |
100 | - yaxisCategory.label = newValue.first | |
101 | - } else{ | |
102 | - serieNumber.data.add(Data<String, Number>(getValueVisitorX.value, getValueVisitorY.value.toDouble())) | |
103 | - scatterChartNumber.data.addAll(serieNumber) | |
104 | - setChartNumberVisible() | |
105 | - xaxisNumber.label = "Date" | |
106 | - yaxisNumber.label = newValue.first | |
118 | + val serieStringX: Array<String> = arrayListStringX.toTypedArray() | |
119 | +// val serieDoubleX: Array<Double> = arrayListDoubleX.toTypedArray() | |
120 | + val serieStringY: Array<String> = arrayListStringY.toTypedArray() | |
121 | + val serieDoubleY: Array<Double> = arrayListDoubleY.toTypedArray() | |
122 | + | |
123 | + if (getValueVisitorY.value.toDoubleOrNull() == null) { | |
124 | + scatterTrace.setxArray(serieStringX) | |
125 | + scatterTrace.setyArray(serieStringY) | |
126 | + } else { | |
127 | + scatterTrace.setxArray(serieStringX) | |
128 | + scatterTrace.setyArray(serieDoubleY) | |
107 | 129 | } |
108 | 130 | |
131 | + config.setxAxisTitle("Date") | |
132 | + config.setyAxisTitle(newValue.first) | |
133 | + dataViewer.resetPlot() | |
134 | + plotData.allTraces.clear() | |
135 | + plotData.addTrace(scatterTrace) | |
136 | + dataViewer.updateConfiguration(config) | |
137 | + dataViewer.updatePlot(plotData) | |
138 | + | |
109 | 139 | } |
110 | 140 | |
141 | + plotData.allTraces.clear() | |
142 | +// plotData.addTrace(createScatterTrace()) | |
143 | + config.setxAxisTitle("") | |
144 | + config.setyAxisTitle("") | |
145 | + config.plotTitle = "No data selected" | |
146 | + dataViewer.updateConfiguration(config) | |
147 | + dataViewer.updatePlot(plotData) | |
148 | + | |
149 | +// stackPanePlot.children.add(dataViewer) | |
150 | + | |
111 | 151 | } |
112 | 152 | |
113 | - private fun setChartCategoryVisible(){ | |
114 | - scatterChartCategory.isVisible = true | |
115 | - scatterChartNumber.isVisible = false | |
153 | + private fun createScatterTrace(): ScatterTrace<*>? { | |
154 | + val scatterTrace = ScatterTrace<Any>() | |
155 | + scatterTrace.setxArray(arrayOf("asdf", "fdsa", "asdfffe", "asdfe", "asfee3")) | |
156 | + scatterTrace.setyArray(arrayOf("pppp", "koojoi", "pp", "ii", "rty", "ert")) | |
157 | + scatterTrace.traceName = "MyScatterTrace" | |
158 | + scatterTrace.traceColour = TraceColour.PURPLE | |
159 | + scatterTrace.traceMode = TraceMode.MARKERS | |
160 | + return scatterTrace | |
116 | 161 | } |
117 | 162 | |
118 | - private fun setChartNumberVisible(){ | |
119 | - scatterChartCategory.isVisible = false | |
120 | - scatterChartNumber.isVisible = true | |
163 | + fun createLineTrace(): LineTrace<*>? { | |
164 | + val lineTrace = LineTrace<Any>() | |
165 | + lineTrace.setxArray(arrayOf("asdf", "fdsa", "asdfffe", "asdfe", "asfee3")) | |
166 | + lineTrace.setyArray(arrayOf(0.0, 1.0, 2.0, 3.0, 4.0, 5.0)) | |
167 | + lineTrace.traceName = "MyLineTrace" | |
168 | + lineTrace.traceColour = TraceColour.PURPLE | |
169 | + return lineTrace | |
121 | 170 | } |
122 | 171 | |
172 | +// private fun setChartCategoryVisible() { | |
173 | +// scatterChartCategory.isVisible = true | |
174 | +// scatterChartNumber.isVisible = false | |
175 | +// } | |
176 | +// | |
177 | +// private fun setChartNumberVisible() { | |
178 | +// scatterChartCategory.isVisible = false | |
179 | +// scatterChartNumber.isVisible = true | |
180 | +// } | |
181 | + | |
123 | 182 | private fun setObservableSelectedVesselListener() { |
124 | 183 | observableSelectedVessel.listeners.add(this) |
125 | 184 | } |
126 | 185 | |
127 | 186 | |
128 | 187 | |
129 | 188 | |
130 | 189 | |
131 | 190 | |
132 | 191 | |
133 | 192 | |
... | ... | @@ -166,63 +225,63 @@ |
166 | 225 | return allHeading |
167 | 226 | } |
168 | 227 | |
169 | - private fun populatVesselName(vessel: Vessel): ArrayList<MessageData?> { | |
228 | + private fun populateVesselName(vessel: Vessel): ArrayList<MessageData?> { | |
170 | 229 | val allVesselName: ArrayList<MessageData?> = vessel.getAllVesselName() |
171 | 230 | allVesselName.sortBy { (it as VesselName).value } |
172 | 231 | |
173 | 232 | return allVesselName |
174 | 233 | } |
175 | 234 | |
176 | - private fun populatIMO(vessel: Vessel): ArrayList<MessageData?> { | |
235 | + private fun populateIMO(vessel: Vessel): ArrayList<MessageData?> { | |
177 | 236 | val allIMO: ArrayList<MessageData?> = vessel.getAllIMO() |
178 | 237 | allIMO.sortBy { (it as IMO).value } |
179 | 238 | |
180 | 239 | return allIMO |
181 | 240 | } |
182 | 241 | |
183 | - private fun populatCallSign(vessel: Vessel): ArrayList<MessageData?> { | |
242 | + private fun populateCallSign(vessel: Vessel): ArrayList<MessageData?> { | |
184 | 243 | val allCallSign: ArrayList<MessageData?> = vessel.getAllCallSign() |
185 | 244 | allCallSign.sortBy { (it as CallSign).value } |
186 | 245 | |
187 | 246 | return allCallSign |
188 | 247 | } |
189 | 248 | |
190 | - private fun populatVesselType(vessel: Vessel): ArrayList<MessageData?> { | |
249 | + private fun populateVesselType(vessel: Vessel): ArrayList<MessageData?> { | |
191 | 250 | val allVesselType: ArrayList<MessageData?> = vessel.getAllVesselType() |
192 | 251 | allVesselType.sortBy { (it as VesselType).value } |
193 | 252 | |
194 | 253 | return allVesselType |
195 | 254 | } |
196 | 255 | |
197 | - private fun populatStatus(vessel: Vessel): ArrayList<MessageData?> { | |
256 | + private fun populateStatus(vessel: Vessel): ArrayList<MessageData?> { | |
198 | 257 | val allStatus: ArrayList<MessageData?> = vessel.getAllStatus() |
199 | 258 | allStatus.sortBy { (it as Status).value } |
200 | 259 | |
201 | 260 | return allStatus |
202 | 261 | } |
203 | 262 | |
204 | - private fun populatLength(vessel: Vessel): ArrayList<MessageData?> { | |
263 | + private fun populateLength(vessel: Vessel): ArrayList<MessageData?> { | |
205 | 264 | val allLength: ArrayList<MessageData?> = vessel.getAllLength() |
206 | 265 | allLength.sortBy { (it as Length).value } |
207 | 266 | |
208 | 267 | return allLength |
209 | 268 | } |
210 | 269 | |
211 | - private fun populatWidth(vessel: Vessel): ArrayList<MessageData?> { | |
270 | + private fun populateWidth(vessel: Vessel): ArrayList<MessageData?> { | |
212 | 271 | val allWidth: ArrayList<MessageData?> = vessel.getAllWidth() |
213 | 272 | allWidth.sortBy { (it as Width).value } |
214 | 273 | |
215 | 274 | return allWidth |
216 | 275 | } |
217 | 276 | |
218 | - private fun populatDraft(vessel: Vessel): ArrayList<MessageData?> { | |
277 | + private fun populateDraft(vessel: Vessel): ArrayList<MessageData?> { | |
219 | 278 | val allDraft: ArrayList<MessageData?> = vessel.getAllDraft() |
220 | 279 | allDraft.sortBy { (it as Draft).value } |
221 | 280 | |
222 | 281 | return allDraft |
223 | 282 | } |
224 | 283 | |
225 | - private fun populatCargo(vessel: Vessel): ArrayList<MessageData?> { | |
284 | + private fun populateCargo(vessel: Vessel): ArrayList<MessageData?> { | |
226 | 285 | val allCargo: ArrayList<MessageData?> = vessel.getAllCargo() |
227 | 286 | allCargo.sortBy { (it as Cargo).value } |
228 | 287 | |
229 | 288 | |
230 | 289 | |
231 | 290 | |
232 | 291 | |
233 | 292 | |
234 | 293 | |
235 | 294 | |
236 | 295 | |
... | ... | @@ -244,23 +303,23 @@ |
244 | 303 | |
245 | 304 | data.add(Pair("Heading", populateHeading(vessel))) |
246 | 305 | |
247 | - data.add(Pair("Vessel Name", populatVesselName(vessel))) | |
306 | + data.add(Pair("Vessel Name", populateVesselName(vessel))) | |
248 | 307 | |
249 | - data.add(Pair("IMO", populatIMO(vessel))) | |
308 | + data.add(Pair("IMO", populateIMO(vessel))) | |
250 | 309 | |
251 | - data.add(Pair("Call Sign", populatCallSign(vessel))) | |
310 | + data.add(Pair("Call Sign", populateCallSign(vessel))) | |
252 | 311 | |
253 | - data.add(Pair("Vessel Type", populatVesselType(vessel))) | |
312 | + data.add(Pair("Vessel Type", populateVesselType(vessel))) | |
254 | 313 | |
255 | - data.add(Pair("Status", populatStatus(vessel))) | |
314 | + data.add(Pair("Status", populateStatus(vessel))) | |
256 | 315 | |
257 | - data.add(Pair("Length", populatLength(vessel))) | |
316 | + data.add(Pair("Length", populateLength(vessel))) | |
258 | 317 | |
259 | - data.add(Pair("Width", populatWidth(vessel))) | |
318 | + data.add(Pair("Width", populateWidth(vessel))) | |
260 | 319 | |
261 | - data.add(Pair("Draft", populatDraft(vessel))) | |
320 | + data.add(Pair("Draft", populateDraft(vessel))) | |
262 | 321 | |
263 | - data.add(Pair("Cargo", populatCargo(vessel))) | |
322 | + data.add(Pair("Cargo", populateCargo(vessel))) | |
264 | 323 | |
265 | 324 | dataList.addAll(data) |
266 | 325 | } |
src/main/kotlin/application/model/Message.kt
View file @
f15a589
... | ... | @@ -10,11 +10,11 @@ |
10 | 10 | val speedOverGround = SpeedOverGround(split[4].toDoubleOrNull()) |
11 | 11 | val courseOverGround = CourseOverGround(split[5].toDoubleOrNull()) |
12 | 12 | val heading = Heading(split[6].toDoubleOrNull()) |
13 | - val vesselName = VesselName(split[7]) | |
14 | - val imo = IMO(split[8]) | |
15 | - val callSign = CallSign(split[9]) | |
13 | + val vesselName = VesselName(if (split[7] == "") null else split[7]) | |
14 | + val imo = IMO(if (split[8] == "") null else split[8]) | |
15 | + val callSign = CallSign(if (split[9] == "") null else split[9]) | |
16 | 16 | val vesselType = VesselType(split[10].toIntOrNull()) |
17 | - val status = Status(split[11]) | |
17 | + val status = Status(if (split[11] == "") null else split[11]) | |
18 | 18 | val length = Length(split[12].toDoubleOrNull()) |
19 | 19 | val width = Width(split[13].toDoubleOrNull()) |
20 | 20 | val draft = Draft(split[14].toDoubleOrNull()) |
src/main/resources/gui/dataPanel.fxml
View file @
f15a589
1 | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | 2 | |
3 | -<?import javafx.scene.chart.*?> | |
4 | -<?import javafx.scene.control.*?> | |
3 | +<?import javafx.scene.control.ListView?> | |
4 | +<?import javafx.scene.control.SplitPane?> | |
5 | 5 | <?import javafx.scene.layout.*?> |
6 | - | |
7 | -<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.241" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.controller.DataPanelController"> | |
8 | - <SplitPane dividerPositions="0.1705685618729097" prefHeight="212.0" prefWidth="254.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> | |
9 | - <ListView fx:id="dataListView" layoutX="-73.0" layoutY="14.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" /> | |
10 | - <StackPane prefHeight="150.0" prefWidth="200.0"> | |
11 | - <ScatterChart fx:id="scatterChartNumber"> | |
12 | - <xAxis> | |
13 | - <CategoryAxis side="BOTTOM" fx:id="xaxisNumber" /> | |
14 | - </xAxis> | |
15 | - <yAxis> | |
16 | - <NumberAxis fx:id="yaxisNumber" side="LEFT" /> | |
17 | - </yAxis> | |
18 | - </ScatterChart> | |
19 | - <ScatterChart fx:id="scatterChartCategory" visible="false"> | |
20 | - <xAxis> | |
21 | - <CategoryAxis side="BOTTOM" fx:id="xaxisCategory" /> | |
22 | - </xAxis> | |
23 | - <yAxis> | |
24 | - <CategoryAxis fx:id="yaxisCategory" side="LEFT" /> | |
25 | - </yAxis> | |
26 | - </ScatterChart> | |
27 | - </StackPane> | |
6 | +<?import org.charts.dataviewer.javafx.JavaFxDataViewer?> | |
7 | +<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.241" | |
8 | + xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.controller.DataPanelController"> | |
9 | + <SplitPane dividerPositions="0.1705685618729097" prefHeight="212.0" prefWidth="254.0" AnchorPane.bottomAnchor="0.0" | |
10 | + AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> | |
11 | + <ListView fx:id="dataListView" layoutX="-73.0" layoutY="14.0" prefHeight="200.0" prefWidth="200.0" | |
12 | + AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" | |
13 | + AnchorPane.topAnchor="0.0"/> | |
14 | + <JavaFxDataViewer fx:id="dataViewer"/> | |
28 | 15 | </SplitPane> |
29 | 16 | </AnchorPane> |
src/main/resources/gui/windows.fxml
View file @
f15a589
1 | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | 2 | |
3 | -<?import javafx.scene.control.SplitPane?> | |
3 | +<?import javafx.scene.control.*?> | |
4 | 4 | <?import javafx.scene.layout.*?> |
5 | -<?import javafx.scene.shape.Line?> | |
6 | -<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="900.0" | |
7 | - prefWidth="1200.0" xmlns="http://javafx.com/javafx/8.0.241" xmlns:fx="http://javafx.com/fxml/1"> | |
5 | +<?import javafx.scene.shape.*?> | |
6 | + | |
7 | +<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="900.0" prefWidth="1200.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"> | |
8 | 8 | <children> |
9 | - <fx:include source="menuBar.fxml" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" | |
10 | - AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"/> | |
11 | - <SplitPane dividerPositions="0.13772954924874792" layoutY="39.0" prefHeight="865.0" prefWidth="1194.0" | |
12 | - AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" | |
13 | - AnchorPane.topAnchor="35.0"> | |
9 | + <fx:include source="menuBar.fxml" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" /> | |
10 | + <SplitPane dividerPositions="0.13772954924874792" layoutY="39.0" prefHeight="865.0" prefWidth="1194.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="35.0"> | |
14 | 11 | <items> |
15 | 12 | <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0"> |
16 | 13 | <children> |
17 | - <fx:include source="vesselListPanel.fxml" AnchorPane.leftAnchor="0.0" | |
18 | - AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"/> | |
14 | + <fx:include source="vesselListPanel.fxml" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" /> | |
19 | 15 | </children> |
20 | 16 | </AnchorPane> |
21 | 17 | <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0"> |
22 | 18 | <children> |
23 | - <SplitPane dividerPositions="0.536" layoutX="127.0" layoutY="74.0" orientation="VERTICAL" | |
24 | - prefHeight="200.0" prefWidth="160.0" AnchorPane.bottomAnchor="0.0" | |
25 | - AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> | |
19 | + <SplitPane dividerPositions="0.536" layoutX="127.0" layoutY="74.0" orientation="VERTICAL" prefHeight="200.0" prefWidth="160.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> | |
26 | 20 | <items> |
27 | - <fx:include source="mapPanel.fxml"/> | |
28 | - <fx:include source="dataPanel.fxml"/> | |
21 | + <fx:include source="mapPanel.fxml" /> | |
22 | + <fx:include source="dataPanel.fxml" /> | |
29 | 23 | </items> |
30 | 24 | </SplitPane> |
31 | 25 | </children> |
32 | 26 | </AnchorPane> |
33 | 27 | </items> |
34 | 28 | </SplitPane> |
35 | - <Line endX="1101.0" endY="1.1444091796875E-5" layoutX="101.0" layoutY="35.0" startX="-100.0"/> | |
29 | + <Line endX="3000.0" layoutX="101.0" layoutY="35.0" startX="-100.0" AnchorPane.leftAnchor="-3.0" AnchorPane.rightAnchor="0.0" /> | |
36 | 30 | </children> |
37 | 31 | </AnchorPane> |