2016-04-24 2 views
0

Im пытается сделать 17 на 17 GridLayout доска, но когда я запускаю код совет, который я генерироваться перепутались и выглядит вместо 17 по 17 кнопок борту:Кнопки полностью не загружаются в GridLayout

enter image description here

Итак, мой вопрос в том, почему панель выглядит странно подобной, и как я могу ее отобразить 17-ю кнопочную панель, которую я хочу?

Вот код, я использую:

public class TheJFrame { 
public static final char[][] board = new char[17][17]; 
public static class TheJFramez { 
    JFrame boardz = new JFrame("Game of Life"); 
    JPanel panel = new JPanel(); 
    public TheJFramez(){ 
     int r = 0,c; 
     boardz.setLayout(new GridLayout(board.length,board[r].length,1,1)); 
     for(r=0;r<board.length;r++){ 
      for(c = 0;c<board[r].length;c++){ 
       JButton tats = new JButton(" " + board[r][c] + " "); 
       panel.add(tats); 

      } 
     } 
     boardz.add(panel); 
     boardz.setVisible(true); 
     boardz.setSize(1200, 700); 
     boardz.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    } 
} 
public static void main(String[] args) { 
    new TheJFramez(); 
} 
} 

ответ

2

В этом коде, вы установили макет «boardz» в GridLayout пока вы добавляете кнопки «панель», кто макет не определен так , он принимает макет по умолчанию, когда вы добавляете панель в «boardz», панель будет организована в виде сетки, в то время как компоненты «панели» все еще будут в макете по умолчанию.

Итак, вы хотите добавить JButton на борт и не использовать панель.

Вот правильный код: -

import java.awt.*; 
import javax.swing.*; 
public class TheJFrame { 
public static final char[][] board = new char[17][17]; 
public static class TheJFramez { 
    JFrame boardz = new JFrame("Game of Life"); 
    JPanel panel = new JPanel(); 
    public TheJFramez(){ 
     int r = 0,c; 
     boardz.setLayout(new GridLayout(board.length,board[r].length)); 
     for(r=0;r<17;r++){ 
      for(c = 0;c<17;c++){ 
       JButton tats = new JButton(" " + board[r][c] + " "); 
       boardz.add(tats); 
       System.out.print(board[r][c]); 
      } 
      System.out.println(); 
     } 

     boardz.setVisible(true); 
     boardz.setSize(1200, 700); 
     boardz.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    } 
} 
public static void main(String[] args) { 
    new TheJFramez(); 
} 
} 

enter image description here

1

Shubham вы правы, но расположение кадра принимают по умолчанию, который FlowLayout. Таким образом, они расположены в линейном порядке. Так что вы можете просто установить макет как gridlayout.

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