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
      }
    }
  }
}

Скриншот

Другие вопросы по тегам