Hadi Salameh
Hadi Salameh

Reputation: 17

How do I insert all my shapes into an array?

I am Trying to build a cinema booker, where I have to select the seats. I was thinking about make placing all my rectangles in an array so i could use it for later, when clicking on a seat it should check if left and right seats are booked. Here the array index should help me. However I cant figure out how to get to this stage. (See picture.)

Take this scenario: You click on a rectangle (representing a seat). It changes color only it is not Red colored. So Seats[][].checkNeighbourColor or something like that.See picture

package sample;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

import java.awt.*;
import java.util.ArrayList;


public class Main extends Application {

private int seats = 12;
private int rows = 8;
private static Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); //gets screen resolution data





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

}

@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("");
    Group root = new Group();
    Scene scene = new Scene(root, screenSize.getWidth()/4, screenSize.getHeight()/3, Color.WHITE);


    for (int i = 0; i<= seats; i++)
    {
        Rectangle r = new Rectangle();
        r.setFill(Color.GREEN);
        r.setX(scene.getWidth()/5+i*30);
        r.setY(scene.getHeight()/5);
        r.setWidth(screenSize.getHeight()/80);
        r.setHeight(screenSize.getHeight()/80);
        root.getChildren().add(r);

        for (int q = 0; q<=rows; q++)
        {
            Rectangle s = new Rectangle();
            s.setFill(Color.GREEN);
            s.setX(scene.getWidth()/5+i*30);
            s.setY(scene.getHeight()/5+q*30);
            s.setWidth(screenSize.getHeight()/80);
            s.setHeight(screenSize.getHeight()/80);
            root.getChildren().add(s);


            s.setOnMouseClicked(event ->{
                s.setFill(Color.BLACK);
            });

        }
    }



    primaryStage.setScene(scene);
    primaryStage.show();
}

}

Upvotes: 1

Views: 1163

Answers (2)

Hadi Salameh
Hadi Salameh

Reputation: 17

Okay I found my mistake. It was a simple ArrayOutOfBound (The statement in my for-loops was wrong), but thank you all for your help :)

Upvotes: 0

James_D
James_D

Reputation: 209279

It's not entirely clear to me what you're asking, but can't you just do

private Rectangle[][] rectangles = new Rectangle[seats][rows];

and then just do

rectangles[i][q] = s ;

For your listener you can do

final int row = i ;
final int seat = q ;
s.setOnMouseClicked(event -> {
    // check rectangles[row-1][seat] and rectangles[row+1][seat] as needed,
    // checking for range of row first
});

Aside: don't mix AWT and JavaFX. Use the Screen API to get the dimension of the physical screen(s) in JavaFX.

Upvotes: 2

Related Questions