Java 使用节点而不是字符串的CustomTreeItem

Java 使用节点而不是字符串的CustomTreeItem,java,scala,treeview,javafx-2,scalafx,Java,Scala,Treeview,Javafx 2,Scalafx,[编辑]:我设法解决了我的问题,但我仍在寻找更好的解决方案。我的解决方案发布在下面 我对Scala和ScalaFX都比较陌生,但我以前使用过JavaFX。我正在尝试创建一个树状视图,其中包含使用HBox的自定义行 这就是我想要创建的: 正如您所见,TreeView既使用文本作为字符串,也使用节点(状态栏、标签、超链接/按钮)。当我将TreeItem的值设置为节点时,它使用toString函数打印字符串表示,但我希望它显示实际的节点 我知道我可以重写toString函数,但我没有使用它,因为我

[编辑]:我设法解决了我的问题,但我仍在寻找更好的解决方案。我的解决方案发布在下面

我对Scala和ScalaFX都比较陌生,但我以前使用过JavaFX。我正在尝试创建一个树状视图,其中包含使用HBox的自定义行

这就是我想要创建的:

正如您所见,TreeView既使用文本作为字符串,也使用节点(状态栏、标签、超链接/按钮)。当我将TreeItem的值设置为节点时,它使用toString函数打印字符串表示,但我希望它显示实际的节点

我知道我可以重写toString函数,但我没有使用它,因为我希望节点显示,而不仅仅是文本

这是我编写的示例代码:

import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.collections.ObservableBuffer
import scalafx.scene.{Scene}
import scalafx.scene.control.{TreeItem, TreeView}
import scalafx.scene.layout.{BorderPane, HBox}

object Launcher extends JFXApp {

  case class Picture(path : String, fileSize : Double, isRoot : Boolean,
                     picChildren : Seq[Picture])

  case class PictureRow(picture: Picture) extends HBox

  val childList = Seq(
    new Picture("/Users/lindberg/Desktop/download.jpeg", 1.4, isRoot = false, Nil),
    new Picture("/Users/lindberg/Desktop/image5.jpeg", 0.5, isRoot = false, Nil)
  )

  val rootList = Seq(
    new Picture("/Users/lindberg/Desktop/", 0, isRoot = true, childList)
  )


  val treeView = new TreeView[PictureRow]() {
    root = new TreeItem[PictureRow]() {
      children = ObservableBuffer(rootList.map(n => makeTreeItem(n)))
      expanded = true
    }
    showRoot = false
  }

  val scene = new Scene(800, 400)

  scene.root = new BorderPane {
    center = treeView
  }

  stage = new PrimaryStage()

  stage.scene = scene

  def makeTreeItem(picture : Picture): TreeItem[PictureRow] = {
    val item = new TreeItem[PictureRow]() {
      children = ObservableBuffer(picture.picChildren.map(n => makeTreeItem(n)))
      expanded = true
      value = PictureRow(picture)
    }
    item
  }
}
[编辑]:这是一个解决问题的解决方案,但它仍然不是一个好的解决方案,因此如果有人对此感兴趣,我希望得到一些帮助

解决方案:
我重写了toString函数以返回空字符串,并将一个窗格作为图形节点添加到TreeItem中。然后,该窗格中填充了我希望位于该行中的所有节点

这是一个解决问题的解决方案,但它仍然不是一个好的解决方案,因此如果有人对此感兴趣,我希望得到一些帮助


解决方案:由于如果值为null,TreeView不会显示TreeItem的图形,因此我重写了toString函数以返回空字符串。现在显示图形,之后有一个不可见的空字符串“”。我在树元素中添加了一个窗格作为图形节点。然后,该窗格中填充了我希望在该行中的所有节点。

这是一个解决问题的解决方案,但它仍然不是一个好的解决方案,因此如果有人感兴趣,我希望得到一些帮助


解决方案:由于如果值为null,TreeView不会显示TreeItem的图形,因此我重写了toString函数以返回空字符串。现在显示图形,之后有一个不可见的空字符串“”。我在树元素中添加了一个窗格作为图形节点。然后,该窗格中填充了我希望位于该行的所有节点。

请不要将解决方案编辑到问题中;相反,在下面贴一个答案。这说明了另一个问题。这是关于问题的详细信息,比如最初没有提供的代码。如果你有一个真实的答案,请张贴一个答案。谢谢:)请不要在问题中编辑答案;相反,在下面贴一个答案。这说明了另一个问题。这是关于问题的详细信息,比如最初没有提供的代码。如果你有一个真实的答案,请张贴一个答案。谢谢:)