ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 添加内容时如何自动调整对话框窗格大小?

2019-05-28 08:51:40  阅读:289  来源: 互联网

标签:java javafx-8


对于我正在开发的应用程序,我需要用户输入多行数据.确切的数字是可变的,用户也应该能够自己添加行.我现在正在使用JavaFX Dialog,除了当你添加行时,Dialog没有相应调整大小.有没有办法让Dialog在添加行时自动调整大小?

下面是一个演示应用程序,其中包含一个示例测试应用程序,其中的Dialog类似于我想要的.

package test_dialog;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.DialogPane;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Test_Dialog extends Application {

    class ScalableDialog extends Dialog<String> {

        int nrRows = 2;

        public ScalableDialog() {

            // We are resizable
            setResizable(true);

            // Set up the grid pane.
            GridPane grid = new GridPane();
            grid.setHgap(10);
            grid.setVgap(5);
            grid.setMaxWidth(Double.MAX_VALUE);
            grid.setAlignment(Pos.CENTER_LEFT);

            // Set up dialog pane
            DialogPane dialogPane = getDialogPane();
            dialogPane.setHeaderText(null);
            dialogPane.getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
            dialogPane.setContent(grid);

            // Create some fields to start with
            for (int i = 0; i < nrRows; i++) {
                grid.addRow(i, new TextField("Row: " + i));
            }

            // Add button
            final Button buttonAdd = new Button("Add Row");
            buttonAdd.setOnAction((ActionEvent e) -> {
                // Move Button to next row
                GridPane.setRowIndex(buttonAdd, nrRows + 1);
                // Insert new text field row
                grid.addRow(nrRows, new TextField("New: " + nrRows++));
            });
            grid.add(buttonAdd, 0, nrRows);
        }
    }

    @Override
    public void start(Stage primaryStage) {
        Button button = new Button();
        button.setText("Open Dialog");
        button.setOnAction(e -> {
            new ScalableDialog().showAndWait();
        });

        StackPane root = new StackPane();
        root.getChildren().add(button);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Scalable Dialog Test");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

解决方法:

dialogPane.getScene().getWindow().sizeToScene();

on“添加”按钮的动作事件处理程序.
Stage.sizeToScene()类似于Swing的jframe.pack().在底部,对话框被添加到某个(子,次)阶段,我们可以通过getScene().getWindow()获取它.

标签:java,javafx-8
来源: https://codeday.me/bug/20190528/1169925.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有