【问题标题】:Javafx create rectangles in a loopJavafx 在循环中创建矩形
【发布时间】:2016-02-10 04:39:45
【问题描述】:

我正在学习 Javafx,但无法让我的 for 循环在每次迭代时创建一个新矩形。当我运行程序时,它会在左上角创建一个矩形,就是这样。我的目标是根据指定的列数、行数、像素宽和像素高创建一个矩形网格。除了创建矩形之外,一切都经过测试。

for(int i = 0; i < columns; ++i)
    {//Iterate through columns
        for(int j = 0; j < rows; ++j)
        {//Iterate through rows
            Color choice = chooseColor(rectColors);
            //Method that chooses a color

            rect = new Rectangle(horizontal*j, vertical*i, horizontal, vertical);
            //Create a new rectangle(PosY,PosX,width,height)

            rect.setStroke(choice);
            //Give rectangles an outline so I can see rectangles

            root.getChildren().add(rect);
            //Add Rectangle to board

        }
    }

我试图弄清楚为什么没有创建矩形。任何帮助将不胜感激。

【问题讨论】:

    标签: java javafx gridpane


    【解决方案1】:

    我使用了与您相同的程序。 试试这个并检查你在哪里犯了错误。还要检查你初始化的值。

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.layout.AnchorPane;
    import javafx.scene.paint.Color;
    import javafx.scene.shape.Rectangle;
    import javafx.stage.Stage;
    
    public class RectangleDemo extends Application{
    
        @Override
        public void start(Stage stage) {
            AnchorPane root = new AnchorPane();
            Scene scene = new Scene(root);
            stage.setScene(scene);
    
            int columns = 20, rows = 10 , horizontal = 20, vertical = 20;
            Rectangle rect = null;
            for(int i = 0; i < columns; ++i)
            {//Iterate through columns
                for(int j = 0; j < rows; ++j)
                {//Iterate through rows
    //              Color choice = chooseColor(rectColors);
                    //Method that chooses a color
    
                    rect = new Rectangle(horizontal*j, vertical*i, horizontal, vertical);
                    //Create a new rectangle(PosY,PosX,width,height)
    
                    rect.setStroke(Color.RED);
                    //Give rectangles an outline so I can see rectangles
    
                    root.getChildren().add(rect);
                    //Add Rectangle to board
    
                }
            }
            scene.setRoot(root);
            stage.show();
    
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    希望对你有帮助……

    【讨论】:

    • 这行得通,但我忘了提到我使用的是 GridPane 而不是 AnchorPane。除此之外,我们的两个代码看起来几乎相同。我想使用 GridPane,但无论出于何种原因,它仍然无法正常工作。
    • 如果您使用网格窗格,则必须提及行索引和列索引。 root.add(rect,j,i);用这个代替 root.getChildren().add(rect);
    • 你告诉我使用的代码没有编译,但是通过使用 GridPane.setConstraints() 我让它工作了。非常感谢!
    • 我说的代码也可以工作,伙计...你需要删除 root.getchildren.add(rect);从您的代码中并在同一个地方添加 root.add(rect,j,i);它肯定会起作用。不客气:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2017-01-28
    • 2014-09-03
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多