[编辑]:我设法绕过我的问题,但我仍然在寻找更好的解决方案。我的解决方案发布如下。CustomTreeItem使用节点而不是字符串
我对Scala以及ScalaFX都比较陌生,但之前我曾使用过JavaFX。我正在尝试创建一个使用HBoxes的自定义行的TreeView。
这是我想创造什么: Image displaying a TreeView
正如你所看到的TreeView控件同时使用文本字符串,而且节点(状态栏,标签,超链接/按钮)。当我将TreeItem的值设置为节点时,它使用toString函数来打印字符串表示,但我希望它显示实际的节点。
String representation of the Node
我知道我可以重写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中。这个窗格然后被我想要在行中的所有节点填充。
请不要编辑问题的解决方案;相反,请在下面发布答案。 – Mithrandir
另有说法。 [图片](http://i.imgur.com/i6rnz8K) – lindbergan
这是关于这个问题的详细信息 - 比如,最初没有提供的代码。如果您有实际的答案,请发布答案。谢谢 :) – Mithrandir