根据tutorial中的建议,我在SearchView
标头中添加了Workspace
:
class AppWorkspace : Workspace() {
init {
add(SearchView::class)
}
}
class SearchView : View() {
override val root = textfield {
promptText = "search"
enableWhen { searchable }
}
}
因此,我需要一个属性以在某些视图中启用该字段:
val searchable = SimpleBooleanProperty(false)
我应该在哪里定义它以及如何访问它?
以及如何实现onSearch
之类的东西?
答案 0 :(得分:0)
我建议创建一个Searchable界面:
interface Searchable {
fun onSearch(query: String)
}
在停靠时应启用搜索字段的视图将实现此接口。您可以通过创建一个可观察的布尔值来检查搜索输入的启用状态,以对此进行检查:
enableWhen(workspace.dockedComponentProperty.booleanBinding { it is Searchable })
然后,您可以确保搜索字段操作转发到当前停靠的onSearch
中的Searchable
函数:
action {
(workspace.dockedComponent as Searchable).onSearch(text)
}
现在,只需在您的onSearch
视图类中实现Searchable
即可。您还可以通过事件清除搜索字段:
object ClearSearch : FXEvent()
在搜索字段中收听此事件:
subscribe<ClearSearch> { clear() }
现在,如果您的视图想要清除搜索字段,则可以触发此事件:
覆盖乐趣onSearch(query:String){ println(“正在搜索$ query ...”) 火(ClearSearch) }
为完整起见,这里是SearchView
:
class SearchView : View() {
override val root = textfield {
promptText = "search"
enableWhen(workspace.dockedComponentProperty.booleanBinding { it is Searchable })
action {
(workspace.dockedComponent as Searchable).onSearch(text)
}
subscribe<ClearSearch> { clear() }
}
}
这是一个实现Searchable
的类:
class Editor1 : View("Editor 1"), Searchable {
override val root = borderpane {
center {
label("Nothing here yet")
}
}
override fun onSearch(query: String) {
println("Searching for $query...")
fire(ClearSearch)
}
}
希望这会有所帮助:)
答案 1 :(得分:0)
按照埃德文的回答我得到:
(1920, 1080)
问题是,当我在init {}部分中放入add(SearchView :: class)并将其停靠在Searchable视图中时,“搜索”文本字段将无法启用,如果将其放入onDock函数中,它将获得启用。
但是,如果我从MyApp2打开MyWorkspace,将其关闭并再次打开,则会收到错误消息,因为再次调用了onDock并尝试再次添加(SearchView :: class)。什么解决方案可以使我从其他窗口打开MyWorkspace而没有任何麻烦?