[編輯]:我設法繞過我的問題,但我仍然在尋找更好的解決方案。我的解決方案發布如下。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