2017-11-27 8 views
1

나는 시어터를 만들려고 노력하고있다. 좌석을 선택해야한다. 나는 배열에 모든 직사각형을 배치하는 것에 대해 생각하고 있었기 때문에 좌석을 클릭 할 때 왼쪽 및 오른쪽 자리가 예약되어 있는지 확인해야 나중에 사용할 수있었습니다. 여기 배열 인덱스가 도움이 될 것입니다. 그러나 나는이 단계에 도달하는 방법을 이해할 수 없다. (그림 참조)모든 셰이프를 배열에 어떻게 삽입합니까?

다음 시나리오를 따르십시오. 직사각형 (좌석을 나타냄)을 클릭합니다. 그것은 붉은 색으로 만 색이 변합니다. 그래서 좌석 [] []. checkNeighbourColor 또는 그와 비슷한 것. 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(); 
} 

}

+1

'awt' 가져 오기를 수행하는 이유가 있습니까? – Sedrick

+0

왜'GridPane'을 사용하지 않겠습니까? 이렇게하면 배열을 사용할 필요가 없습니다. – Sedrick

+0

'JavaFX'를 사용하여 화면 크기를 얻는 방법 : http://java-buddy.blogspot.com/2013/11/get-screen-size-using-javafxstagescreen.html – Sedrick

답변

2

그것은 당신이 요구하는지 나에게 완전히 명확하지 않다,하지만 당신은 단지 다음

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

및 단지

rectangles[i][q] = s ; 

을 할 수 없어 청취자는 할 수 있습니다

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 
}); 

제외 : AWT와 JavaFX를 섞어 사용하지 마십시오. Screen API을 사용하여 JavaFX에서 실제 화면의 크기를 가져옵니다.

+0

그냥 "정렬"순서대로 내 "좌석"을 저장하려고 했으므로 언제든지 내 s.setOnMouseClicked (이벤트 -> {{내가 클릭 한 객체의 인덱스를 가져 와서 뒤에있는 인덱스와 infront를 확인해야한다. 이걸 사용하여 색을 확인해 보겠다 . –

+0

나는 이미 이것을 시도했지만, 항상 오류가 발생한다. –

0

오케이 제 실수를 발견했습니다. 그것은 단순한 ArrayOutOfBound (for-loops의 문이 잘못되었습니다.)이지만 도움을 주신 모든 분들께 감사드립니다 :)