JavaFX - Dialog中的ScrollPane交替高度

时间:2016-12-15 06:34:54

标签: java javafx javafx-8

我遇到了JavaFX的问题。

我想在一个对话框中放一个ScrollPane并给Scrollpane一个最大高度,没有最小高度或pref-height,因为它可以更短。

这是一个简单的例子来证明我的问题 主类:

package application;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application
{
  @Override
  public void start(Stage primaryStage)
  {
    try
    {
      StackPane root = new StackPane();
      MyDialog dialog = new MyDialog();
      Button button = new Button("Test");
      button.setOnMousePressed(e -> dialog.showAndWait());
      root.getChildren()
          .add(button);
      Scene scene = new Scene(root, 400, 400);
      primaryStage.setScene(scene);
      primaryStage.show();
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

  public static void main(String[] args)
  {
    launch(args);
  }
}

对话框类:

package application;

import javafx.scene.control.Button;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.DialogPane;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;

public class MyDialog extends Dialog<ButtonType>
{
  public MyDialog()
  {
    super();
    DialogPane dialogPane = new DialogPane();
    VBox outer = new VBox();
    Button button = new Button("Test");
    setResult(new ButtonType("NO", ButtonData.LEFT));
    button.setOnMousePressed(e -> close());
    VBox inner = new VBox();
    inner.getChildren()
        .add(new Text("Test 1"));
    inner.getChildren()
        .add(new Text("Test 2"));
    inner.getChildren()
        .add(new Text("Test 3"));
    inner.getChildren()
        .add(new Text("Test 4"));
    inner.getChildren()
        .add(new Text("Test 5"));
    ScrollPane scroll = new ScrollPane(inner);
    scroll.setMaxHeight(80);
    outer.getChildren()
        .addAll(button, scroll);
    dialogPane.setContent(outer);
    this.setDialogPane(dialogPane);
  }
}

具体问题如下 对话框应如下所示:
enter image description here

但是第二次打开它时,它看起来像这样:
enter image description here

我无法弄清问题是什么。希望任何人都可以告诉我为什么这不起作用。

1 个答案:

答案 0 :(得分:0)

我无法使用提供的代码重现行为。对我来说,它总是这样:

enter image description here

但是有一个特定的原因,你不想使用javafx ListView,它似乎正在做你正在尝试做的事情吗?

    public MyDialog() {
    super();
    DialogPane dialogPane = new DialogPane();
    VBox outer = new VBox();
    Button button = new Button("Test");
    setResult(new ButtonType("NO", ButtonData.LEFT));
    button.setOnMousePressed(e -> close());
    ListView<Text> inner = new ListView<Text>();
    inner.getItems().add(new Text("Test 1"));
    inner.getItems().add(new Text("Test 2"));
    inner.getItems().add(new Text("Test 3"));
    inner.getItems().add(new Text("Test 4"));
    inner.getItems().add(new Text("Test 5"));
    inner.getItems().add(new Text("Test 6"));
    inner.getItems().add(new Text("Test 7"));
    inner.setMaxHeight(80);
    outer.getChildren().addAll(button, inner);
    dialogPane.setContent(outer);
    this.setDialogPane(dialogPane);
}