ScalaFX: как растянуть ScrollPane, чтобы он соответствовал родительскому элементу
Я использую Border Pane в качестве макета. Нижний дочерний элемент имеет ScrollPane, который должен использовать всю ширину (растяжение) Border Pane - независимо от его содержимого.
val scrollPane = new ScrollPane() {
hbarPolicy = ScrollBarPolicy.ALWAYS
content = new TextFlow() {
children.add(new Text("Hello World"))
}
}
stage = new PrimaryStage {
title = "ScalaFX Hello World"
width = 1024
height = 768
scene = new Scene {
content = new BorderPane() {
center = Label("This is my center text")
bottom = new Pane {
children.add(scrollPane)
}
}
}
Это выглядит во время выполнения следующим образом:
Есть ли шанс, что я смогу добиться этого, не устанавливая ширину полосы прокрутки вручную?
1 ответ
Решение
В ScalaFX, если родительский элемент не передан, сценарий создается с пустой группой.
class Scene(override val delegate: jfxs.Scene = new jfxs.Scene(new jfxs.Group()))
Итак, вместо настройки content
, установить root
сцены.
scene = new Scene {
root = new BorderPane() {
center = Label("This is my center text")
bottom = scrollPane
}
}
Вы, должно быть, заметили, что я даже удалил новую панель, которую вы добавляли внизу, перед добавлением ScrollPane.
MCVE
import scalafx.application.JFXApp
import scalafx.scene.Scene
import scalafx.scene.control.ScrollPane.ScrollBarPolicy
import scalafx.scene.control.{Label, ScrollPane}
import scalafx.scene.layout.BorderPane
import scalafx.scene.text.{Text, TextFlow}
object Main extends JFXApp {
val scrollPane = new ScrollPane() {
hbarPolicy = ScrollBarPolicy.ALWAYS
content = new TextFlow() {
children.add(new Text("Hello World"))
}
}
stage = new JFXApp.PrimaryStage {
title.value = "Hello Stage"
width = 200
height = 150
scene = new Scene {
root = new BorderPane() {
center = Label("This is my center text")
bottom = scrollPane
}
}
}
}
Скриншот