Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX GridPane单元格未根据内容自动调整大小_Java_User Interface_Javafx_Gridpane - Fatal编程技术网

JavaFX GridPane单元格未根据内容自动调整大小

JavaFX GridPane单元格未根据内容自动调整大小,java,user-interface,javafx,gridpane,Java,User Interface,Javafx,Gridpane,我正在编写一个JavaFX程序,它可以生成一个随机颜色的网格。调整窗口大小时,网格应进行调整,使其尽可能大,同时仍保持方形,并在底部为文本留出空间 一切都正常工作,但我遇到的问题是调整网格窗格的大小时,网格窗格中只剩下很少的间隙。调整窗口的大小时,间隙的大小略有变化。有人能帮我找出如何消除这些差距吗?我包括完整的代码。时间不太长。多谢各位 import java.util.Random; import javafx.application.Application; import javafx.

我正在编写一个JavaFX程序,它可以生成一个随机颜色的网格。调整窗口大小时,网格应进行调整,使其尽可能大,同时仍保持方形,并在底部为文本留出空间

一切都正常工作,但我遇到的问题是调整网格窗格的大小时,网格窗格中只剩下很少的间隙。调整窗口的大小时,间隙的大小略有变化。有人能帮我找出如何消除这些差距吗?我包括完整的代码。时间不太长。多谢各位

import java.util.Random;

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Text;
import javafx.stage.Stage;

/**
 * Uses a 2D array to populate a grid of squares with random colors.
 */
public class Lab7 extends Application {

    private Color[][] colorGrid = new Color[8][8];
    private int redCellCount = 0;

    /**
     * Tells the program to start with the start() method since it is a JavaFX
     * Application
     * 
     * @param args
     *            arguments supplied to the program
     */
    public static void main(String[] args) {
        Application.launch(args);
    }

    /**
     * Constructor for the class instantiates the 2D array of Color objects with
     * random colors.
     */
    public Lab7() {
        // array of 12 awt colors not including white since it is used as the
        // background color
        Color[] colorList = { Color.BLACK, Color.BLUE, Color.CYAN, Color.DARKGREY, Color.GRAY, Color.GREEN,
                Color.LIGHTGRAY, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.YELLOW };

        // populate the 2D array of colors with random colors from the colorList
        for (int i = 0; i < colorGrid.length; i++) {
            for (int j = 0; j < colorGrid[i].length; j++) {
                Random rand = new Random();
                int colorCode = rand.nextInt(12);
                if (colorCode == 10) {
                    redCellCount++;
                }
                colorGrid[i][j] = colorList[colorCode];
            }
        }
    }

    /*
     * overridden method of the Application class. This is the entry point of
     * the JavaFX application
     */
    @Override
    public void start(Stage stage) throws Exception {

        // a GridPane that will hold the checkerboard of colors
        GridPane checkerboardPane = new GridPane();

        // a root pane for the layout
        BorderPane parentPane = new BorderPane();

        // create the scene and set the root node as the BorderPane and have the
        // initial size be 400x400 pixels and set the background color to white
        Scene scene = new Scene(parentPane, 400, 400);
        parentPane.setStyle("-fx-background-color: " + toRGBCode(Color.WHITE));

        // a Text object to display the number of red squares
        Text redCellCountText = new Text("There are " + redCellCount + " red squares.");

        // put the colorGrid in the center of the GridPane and the
        // redCellCountText to the bottom
        parentPane.setCenter(checkerboardPane);
        parentPane.setBottom(redCellCountText);

        // create 64 rectangles, fill them with the colors in the colorGrid and
        // set a mouse click event handler
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {

                Rectangle rect = new Rectangle(scene.getWidth() / 8, scene.getWidth() / 8);

                // bind the width property of the rectangle to 1/8 of the
                // smaller of the scene width or height, leave 50 pixels at the
                // bottom for the Text
                rect.widthProperty()
                        .bind(Bindings
                                .when(scene.widthProperty().lessThanOrEqualTo(scene.heightProperty().subtract(50)))
                                .then(scene.widthProperty().divide(8))
                                .otherwise(scene.heightProperty().subtract(50).divide(8)));
                // bind the width of the rectangle to its height so it will
                // always be square
                rect.heightProperty().bind(rect.widthProperty());
                // set the color of the rectangle to correspond to the colorGrid
                rect.setStyle("-fx-fill: " + toRGBCode(colorGrid[i][j]));
                // set an event listener for the rectangle to handle when the
                // user clicks on it
                rect.setOnMouseClicked(new EventHandler<MouseEvent>() {

                    @Override
                    public void handle(MouseEvent event) {

                        // if the rectangle is not red
                        if (!((Rectangle) event.getSource()).getFill().equals(Color.RED)) {
                            // set its color to red
                            ((Rectangle) event.getSource()).setFill(Color.RED);
                            // increment the redCellCount and update the text
                            redCellCount++;
                            redCellCountText.setText("There are " + redCellCount + " red squares.");
                        }
                    }

                });
                // add the rectangle to its respective square in the GridPane
                checkerboardPane.add(rect, j, i);
            }
        }
        // set the scene in the stage and set its title
        stage.setScene(scene);
        stage.setTitle("Lab7");
        // show the stage to make it visible
        stage.show();
    }

    /**
     * 
     * @param color
     *            The JavaFX Color to convert
     * @return the rgb code representing the JavaFX Color
     */
    public static String toRGBCode(Color color) {
        return String.format("#%02X%02X%02X", (int) (color.getRed() * 255), (int) (color.getGreen() * 255),
                (int) (color.getBlue() * 255));
    }
}
import java.util.Random;
导入javafx.application.application;
导入javafx.beans.binding.Bindings;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.input.MouseEvent;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.layout.GridPane;
导入javafx.scene.paint.Color;
导入javafx.scene.shape.Rectangle;
导入javafx.scene.text.text;
导入javafx.stage.stage;
/**
*使用二维阵列以随机颜色填充正方形网格。
*/
公共类Lab7扩展了应用程序{
专用颜色[][]colorGrid=新颜色[8][8];
private int redCellCount=0;
/**
*告诉程序以start()方法开始,因为它是JavaFX
*应用
* 
*@param args
*提供给程序的参数
*/
公共静态void main(字符串[]args){
应用程序启动(args);
}
/**
*类的构造函数使用
*随机颜色。
*/
公共标签7(){
//12种awt颜色的数组,不包括白色,因为它用作
//背景色
Color[]colorList={Color.BLACK,Color.BLUE,Color.CYAN,Color.DARKGREY,Color.GRAY,Color.GREEN,
Color.LIGHTGRAY、Color.洋红、Color.ORANGE、Color.PINK、Color.RED、Color.YELLOW};
//使用颜色列表中的随机颜色填充二维颜色数组
对于(int i=0;i// add the rectangle to its respective square in the GridPane
checkerboardPane.add(rect, j, i);
GridPane.setMargin(rect, new Insets(-1, -1, -1, -1));
checkerboardPane.setSnapToPixel(false);
NumberBinding size = Bindings.min(scene.widthProperty(),
                                  scene.heightProperty().subtract(50))
                             .divide(8);

// binding for size rounded down
NumberBinding roundedSize = Bindings.createIntegerBinding(() -> size.intValue(), size);

for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++) {
        Rectangle rect = new Rectangle();

        rect.widthProperty().bind(roundedSize);
        rect.heightProperty().bind(roundedSize);
        rect.setFill(colorGrid[i][j]);

        // click handler

        checkerboardPane.add(rect, j, i);
    }
}