2015-11-05 4 views
0

Что является самым безболезненным способом создания сетки N x N в приложении JavaFX?Создание сетки N x N

Единственные требования, которые я ищу, это то, что размер сетки всегда будет занимать столько же места, что и больше квадратов = меньшие квадраты. Я могу установить цвета для квадратов, и я могу нависнуть над каждым квадратом в отдельности и показать некоторые для каждого квадрата.

Я не буду знать «N», пока программа не запустится и не проверит некоторые данные, чтобы выяснить, сколько полных квадратов мне нужно, когда я вычисляю самую маленькую сетку NxN, которую я могу использовать.

Из того, что я могу сказать, мои варианты:

  1. GridPane - Использование ограничений столбцов и ограничений строки для создания размера и, возможно, добавить свойства для зависания?
  2. TableView - намного больше возможностей для отображения каждой ячейки данных, когда они зависают, но все же трудно просто добавить строки и столбцы для начала.
  3. Прямоугольники - просто сгенерируйте и нарисуйте каждый прямоугольник, вычисляя координаты x и y для каждого квадрата. Это упростит работу с цветами и зависанием, но я не вижу, как изменится размер, но я уверен, что у меня определенный размер для моего приложения. Я также должен вычислить лучший размер, чтобы каждый квадрат заполнил область сетки.

Я не обязательно ищу кого-нибудь, чтобы закодировать решение, но если кто-то справился с этим и знает хороший способ, я хотел бы услышать об этом.

ответ

2

Не отклоняйтесь от оригинальных идей. Почему вы ищете «безболезненные» способы, когда все методы, которые вы дали, жизнеспособны? Вот один из них, используя ваши прямоугольники. GridMaker.SCREEN_SIZE относится к размеру экрана, который вы должны иметь.

public static Pane makeGrid(int n){ 

    double width = GridMaker.SCREEN_SIZE/n; 
    Pane p = new Pane(); 

    Rectangle [][] rec = new Rectangle [n][n]; 

    for(int i=0; i<n; i++){ 
     for(int j=0; j<n; j++){ 
      rec[i][j] = new Rectangle(); 
      rec[i][j].setX(i * width); 
      rec[i][j].setY(j * width); 
      rec[i][j].setWidth(width); 
      rec[i][j].setHeight(width); 
      rec[i][j].setFill(null); 
      rec[i][j].setStroke(Color.BLACK); 
      p.getChildren().add(rec[i][j]); 

     } 
    } 

    return p; 
} 

Затем просто добавьте прослушиватель мыши к панели, если вы хотите изменить цвет.

p.setOnMouseClicked(new EventHandler <MouseEvent>(){ 
     @Override 
     public void handle(MouseEvent me){ 
      double posX = me.getX(); 
      double posY = me.getY(); 

      int colX = (int)(posX/width); 
      int colY = (int) (posY/width); 

      rec[colX][colY].setFill(Color.RED); 
     } 
    }); 

- Редактирование

1) Yes, it works for me.

2) Для Hover, какого рода эффектами перекатывания вы ищете? Вы можете добавлять эффекты наведения на каждый прямоугольник, если вы хотите, чтобы я показал вам, как это сделать, я могу определенно скопировать его для вас.

+0

Спасибо, просто вопрос, было бы легко добавить мышь на каждый прямоугольник? Я хотел бы иметь возможность нависнуть над квадратами и показать некоторую информацию. –

+0

[Хорошо выглядит] (http://puu.sh/l9MPf/e80e680fc5.png) до сих пор, спасибо за подсказку. –

+0

Я только что отредактировал. Если вам нужна дополнительная помощь, прокомментируйте здесь. – Steven

Смежные вопросы