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> |