首页 > 解决方案 > 模态中的片段条形图未更新 - TornadoFX

问题描述

我创建了一个片段来保存 aBarChart和 a ScrollPane- 最终结果将是一个可滚动的直方图。

我正在使用该openModal方法在单独的模式中创建这些新片段。

我遇到的问题是BarChart当我调用我的方法时似乎没有更新loadData,如下所示:

class Histogram : Fragment() {


override val root = vbox{

    hgrow = Priority.ALWAYS
    vgrow = Priority.ALWAYS

    style{
        minWidth = 1280.px
        minHeight = 180.px
    }

    hbox{
        hgrow = Priority.ALWAYS
    }


}

private val bar = ScrollBar()

private var barChart = barchart("bar", CategoryAxis(), NumberAxis()){

    barGap = 0.0
    categoryGap = -1.0

    hgrow = Priority.ALWAYS
    vgrow = Priority.ALWAYS

    style{
        minWidth = 640.px
        minHeight = 240.px
        maxHeight = 480.px

    }

    isLegendVisible = false

}

private val s = XYChart.Series<String, Number>()

init{

    root.add(barChart)
    root.add(bar)

}


fun loadData(h: AlignmentHistogram){

    s.data.add(XYChart.Data<String, Number>("asd", 2))

    barChart.title = h.rname

   /* for(i in 0..MAX_DATASET_SIZE){
        if(i > h.histogram.size){
            break
        }
        val data = XYChart.Data<String, Int>((h.firstPosition + i + 1).toString(), (h.histogram[i]))
        println(data)
        s.data.add(data)
    }*/


    s.data.add(XYChart.Data<String, Number>("asasdd", 5))

    s.name = h.rname

    barChart.data.add(s)

}

}

AlignmentHistogram只是一个 POJO,其中包含直方图的数据和一些其他细节。

我使用以下代码调用片段:

    val stage = Stage()
    stage.title = "${pointer.rname} - ${selectedFile.file.name}"

    val view = Histogram()
    view.loadData(h)

    val parent = StackPane()
    stage.scene = Scene(parent, 1280.0, 360.0)

    view.openModal(StageStyle.UTILITY, Modality.NONE, false, stage, false, true)

尽管调用,但结果只是新模态中的空直方图barChart.data.add(s)

有任何想法吗?提前致谢!

标签: kotlintornadofx

解决方案


没关系,我通过将 POJO 作为范围传递并将设置代码放入init块中来解决它。

本文帮助了范围部分:

Tornadofx - 如何在每个实例上将参数传递给 Fragment


推荐阅读