【问题标题】:JavaFX Rectangle won't touch right sideJavaFX 矩形不会触及右侧
【发布时间】:2024-01-30 01:05:02
【问题描述】:

我在 JavaFX 中构建了一个矩形。我的场景有 300 的宽度,我的矩形有 80 的宽度。

Rectangle.setX 设置矩形左上角的位置。我将 X 设置为 obScene.getWidth() - carRightSide 并且它没有触及右侧。

我做错了什么?

    package assign3;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Question4 extends Application
{

    public int carRightSide;

    @Override
    public void start( Stage obPrimeStage ) throws Exception
    {

        Pane obPane = new Pane();

        Circle obWheelOne = new Circle(20, Color.BLACK);
        obWheelOne.setRadius(20);
        Circle obWheelTwo = new Circle(20, Color.BLACK);
        obWheelTwo.setRadius(20);

        Rectangle obBody = new Rectangle(80, 40, Color.LIGHTBLUE);


        obPane.getChildren().add(obWheelOne);
        obPane.getChildren().add(obBody);

        Scene obScene = new Scene(obPane, 300, 350);

        carRightSide = 80;
        obBody.setX(obScene.getWidth() - carRightSide);
        obBody.setY(40);

        obPrimeStage.setTitle("Driving Cars");
        obPrimeStage.setScene(obScene);
        obPrimeStage.setResizable(false);
        obPrimeStage.show();


    }

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

    }

}

【问题讨论】:

    标签: java animation javafx


    【解决方案1】:

    在使用Scene.getWidth() 之前,您必须先调用obPrimeStage.show();

    public class Question4 extends Application
    {
    
        public int carRightSide = 80;
    
        @Override
        public void start( Stage obPrimeStage ) throws Exception
        {
    
            Pane obPane = new Pane();           
    
            Scene obScene = new Scene(obPane, 300, 350, Color.ANTIQUEWHITE);
            obPrimeStage.setScene(obScene);//Add scene here
            obPrimeStage.setTitle("Driving Cars");
            obPrimeStage.setResizable(false);
            obPrimeStage.show();//Show Stage so that the size will be calculated
    
            Circle obWheelOne = new Circle(20, Color.BLACK);
            obWheelOne.setRadius(20);
            Circle obWheelTwo = new Circle(20, Color.BLACK);
            obWheelTwo.setRadius(20);
    
            Rectangle obBody = new Rectangle(carRightSide, 40, Color.LIGHTBLUE);
            obBody.setX(obScene.getWidth() - carRightSide);
            obBody.setY(40);
    
            obPane.getChildren().add(obBody);
            obPane.getChildren().add(obWheelOne);
            obPane.getChildren().add(obWheelTwo);
        }
    
        public static void main( String[] args )
        {
            Application.launch(args);
        }
    }
    

    或者你可以在设置Scene后调整Stage的大小

    Scene obScene = new Scene(obPane, 300, 350, Color.ANTIQUEWHITE);
    obPrimeStage.setScene(obScene);//Add scene here
    obPrimeStage.setWidth(obScene.getWidth());
    obPrimeStage.setHeight(obScene.getHeight());
    
    //Circles
    //Rectangle
    //Adding components
    obPrimeStage.setTitle("Driving Cars");
    obPrimeStage.setResizable(false);
    obPrimeStage.show();//Show Stage so that the size will be calculated
    

    【讨论】: