在 ScalaFx 中扩展场景时 TextArea 没有增长
TextArea Not growing when expanding scene in ScalaFx
我一直在尝试将我最初使用 Java 使用 Swing 编写的学校项目转换为使用 ScalaFX 的 Scala。 GUI 基本上是一个带有按钮和搜索输入的顶部栏,而栏的底部是一个 TextArea,它将显示按钮的输出。 This is what the app looks like at startup. The problem is that when I expand the stage with my mouse, the size of the TextArea remains static. Here 就是一个例子。我尝试查找 ScalaFX 的具体帮助,但感觉那里的文档相当薄弱,因此我不得不将研究重点放在 JavaFX 上。我在这里找到了一个 post 关于使用 HBox 在我用鼠标拉伸舞台时扩展我的文本框,但它似乎不起作用。当用鼠标拉伸舞台时,有没有办法让 TextArea 的大小缩放?我在下面的 GUI 代码中添加了 HBox。
object SorcerersCave extends JFXApp{
val informationText: TextArea = new TextArea()
stage = new PrimaryStage {
title = "Sorcerers Cave"
val searchBy = new ComboBox[String](List("Index", "Name", "Type")){
value = "Index"
}
val resizeableBox = new HBox(informationText){
hgrow = Priority.Always
}
val searchInput = new TextField() {prefWidth = 100}
val buttonPane = new FlowPane {
hgap = 5
children = Seq(new Button("Read") { onAction = handle { readFile }} ,
new Button("Display"){ onAction = handle { displayCave() }},
searchBy,
new Label("Search target:"),
searchInput,
new Button("Search"){ onAction = handle { search(searchInput.getText.toLowerCase.trim, searchBy.toString()) }}
)
}
scene = new Scene {
content = new BorderPane {
top = buttonPane
center = resizeableBox
}
}
}
}
在 JavaFX 中,创建 Scene
时必须指定 Parent
的根节点。 ScalaFX 为 Scene
提供默认承包商,将 Group
分配为根节点。在 ScalaFX 中,Scene#content
是访问根节点子节点的快捷方式,默认情况下它们是 Group
的子节点。
在您的情况下,由于 Group
的 re-sizing 行为,您不希望将 Group
作为根节点。
您场景的根节点应该是您的 BorderPane
,因此将其分配给 root
而不是 content
:
scene = new Scene {
root = new BorderPane { ...
}
}
我一直在尝试将我最初使用 Java 使用 Swing 编写的学校项目转换为使用 ScalaFX 的 Scala。 GUI 基本上是一个带有按钮和搜索输入的顶部栏,而栏的底部是一个 TextArea,它将显示按钮的输出。 This is what the app looks like at startup. The problem is that when I expand the stage with my mouse, the size of the TextArea remains static. Here 就是一个例子。我尝试查找 ScalaFX 的具体帮助,但感觉那里的文档相当薄弱,因此我不得不将研究重点放在 JavaFX 上。我在这里找到了一个 post 关于使用 HBox 在我用鼠标拉伸舞台时扩展我的文本框,但它似乎不起作用。当用鼠标拉伸舞台时,有没有办法让 TextArea 的大小缩放?我在下面的 GUI 代码中添加了 HBox。
object SorcerersCave extends JFXApp{
val informationText: TextArea = new TextArea()
stage = new PrimaryStage {
title = "Sorcerers Cave"
val searchBy = new ComboBox[String](List("Index", "Name", "Type")){
value = "Index"
}
val resizeableBox = new HBox(informationText){
hgrow = Priority.Always
}
val searchInput = new TextField() {prefWidth = 100}
val buttonPane = new FlowPane {
hgap = 5
children = Seq(new Button("Read") { onAction = handle { readFile }} ,
new Button("Display"){ onAction = handle { displayCave() }},
searchBy,
new Label("Search target:"),
searchInput,
new Button("Search"){ onAction = handle { search(searchInput.getText.toLowerCase.trim, searchBy.toString()) }}
)
}
scene = new Scene {
content = new BorderPane {
top = buttonPane
center = resizeableBox
}
}
}
}
在 JavaFX 中,创建 Scene
时必须指定 Parent
的根节点。 ScalaFX 为 Scene
提供默认承包商,将 Group
分配为根节点。在 ScalaFX 中,Scene#content
是访问根节点子节点的快捷方式,默认情况下它们是 Group
的子节点。
在您的情况下,由于 Group
的 re-sizing 行为,您不希望将 Group
作为根节点。
您场景的根节点应该是您的 BorderPane
,因此将其分配给 root
而不是 content
:
scene = new Scene {
root = new BorderPane { ...
}
}