我遇到了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);
}
}
我无法弄清问题是什么。希望任何人都可以告诉我为什么这不起作用。
答案 0 :(得分:0)
我无法使用提供的代码重现行为。对我来说,它总是这样:
但是有一个特定的原因,你不想使用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);
}