Reputation: 176
I built a rectangle in JavaFX. My scene has a width of 300, my rectangle has a width of 80.
Rectangle.setX sets the placement of the Rectangle's top left corner. I setX to obScene.getWidth() - carRightSide and it doesn't touch the right side.
What am I doing wrong?
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);
}
}
Upvotes: 0
Views: 275
Reputation: 1254
You have to call obPrimeStage.show();
before you use the .getWidth()
of the Scene
.
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);
}
}
or you can adjust the size of the Stage
after setting the Scene
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
Upvotes: 1