2016-03-22 5 views
1

私は迷路作成プログラムを持っていて、それをguiに入れたいと思っています。私の迷路は2D配列になっているので、JPanelで2DラベルのJLabelを作成し、パスか壁かに基づいて各ラベルに色を割り当てようと計画しました。 JLabelの2D配列を作成してパネルに追加することはできますが、JLabelを実行するとすべてのJLabelsが右に1スペース分移動しますので、左上隅に空白があり、列が1行、行が1行少なくなりますそうであると思われる。 GUIのJLabelの2D配列をGridLayoutに出力する

画像:

http://i.stack.imgur.com/MmDvf.png

ここに私のコードです。私は問題が何であるか分かりません。 GridLayoutのサイズを変更し、ループの回数を変更し、rowとcolの値を変更しています(両方とも現在10です)。手動でその場所に余分なJLabelを作成しようとしましたが、ダイスはありません。

public Maze() { 
    JPanel panel = new JPanel(); 
    getContentPane().add(panel); 

    int row = MazeCreator.r; 
    int col = MazeCreator.c; 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 500, 500); 
    getContentPane().setLayout(new GridLayout(row, col)); 

    JLabel[][] grid= new JLabel[row][col]; 
    for (int i = 0; i < row; i++){ 
     for (int j = 0; j < col; j++){ 
      grid[i][j] = new JLabel(); 
      grid[i][j].setBorder(new LineBorder(Color.BLACK)); 
      //grid[i][j].setBackground(Color.black); 
      grid[i][j].setOpaque(true); 
      super.add(grid[i][j]); 
     } 
    } 
    grid[0][0].setBackground(Color.red); 
} 

私は私が言ったように、手動で入れて、列から1を減算することにより、少なすぎる行とあまりにも多くのcolsの問題を「解決」と行に1を追加し、それは唯一の代わりに100の99件のJLabelを作成し、することができます左上のJLabelは機能しません。

+1

super.add(grid [i] [j]);なぜ??あなたは神に話しかけていますか? – gpasch

答えて

3

super.add()を使用してラベルをパネルに追加しないでください。そしてパネルのレイアウトをに設定しないでください。JFrameに設定してください。

public Maze() { 
    JPanel panel = new JPanel(); 
    getContentPane().add(panel); 

    int row = MazeCreator.r; 
    int col = MazeCreator.c; 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 500, 500); 
    panel.setLayout(new GridLayout(row, col)); 

    JLabel[][] grid= new JLabel[row][col]; 
    for (int i = 0; i < row; i++){ 
     for (int j = 0; j < col; j++){ 
      grid[i][j] = new JLabel(); 
      grid[i][j].setBorder(new LineBorder(Color.BLACK)); 
      //grid[i][j].setBackground(Color.black); 
      grid[i][j].setOpaque(true); 
      panel.add(grid[i][j]); 
     } 
    } 
    grid[0][0].setBackground(Color.red); 
} 
2

コードの構造が混乱しています。

super.add(....); 

はコードを複雑にします。なぜスーパー(...)を使うのですか?ラベルをパネルに直接追加するには、ラベル専用のパネルを作成します。スーパーを使用しないでください。

Simplfyあなたのゲームのパネルが明示的に作成し、そのパネルにコンポーネントを追加することにより、ロジック:

JPanel gamePanel = new JPanel(new GridLayout(...)); 

for (...) 
{ 
    JLabel label = new JLabel(...); 
    gamePanel.add(label); 
} 

add(gamePanel); // add our game panel to the content pane of the frame. 

今すぐあなたのコードがより明確で、エラーが発生しにくいです。

関連する問題