在运行时从Javafx中的另一个类添加形状

时间:2017-06-22 12:19:12

标签: java scala javafx javafx-8

我在Scala中有一个简单的JavaFX程序,我有一个我写的形状的窗格。

class SimpleWindow extends Application {
  val pane = new BorderPane
  val subPane = new Pane
  var coord = (0, 0)
  var primeStage: Stage = _
  var x = 600
  var y = 600

  override def start(primaryStage: Stage) {
    primeStage = primaryStage
    pane.setCenter(subPane)
    val line = new Line(25, 25, 50, 50)
    subPane.getChildren.add(line)

    val x = 600
    val y = 600
    val scene = new Scene(pane, x, y)

    // Finalize and show the stage
    primaryStage.setScene(scene)
    primaryStage.setTitle("The Click Me App")
    primaryStage.show()
  }

  def moveTo(x: Int, y: Int): Unit = {
    SimpleWindow.this.coord = (x, y)
  }

  def lineTo(x: Int, y: Int): Unit = {
    val line = new Line(coord._1, coord._2, x, y)
    SimpleWindow.this.subPane.getChildren.add(line)
    SimpleWindow.this.coord = (x, y)
  }
}

现在simplewindow类将在一个单独的线程上,我希望能够使用lineTo方法从外部类创建一个新行。这是所有失败的地方,当我使用来自另一个类的lineTo(在一个单独的线程上)gui没有更新时,我相信我需要在窗格上有某种监听器,以便在添加节点时进行更新但是我不知道怎么做。

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

在JavaFX中,与大多数其他GUI框架一样,您只能从专用的" UI-thread"访问UI控件。如果要从后台线程传递某些信息,则应使用Platform.runLater调用哪些帖子适用于该线程。

您也可以考虑阅读有关更高级API的Concurrency in JavaFX教程。