2016-04-07 5 views
0

2d配列と関数paintcomponentを使用して10 x 10のグリッドを作成する私の学校プロジェクト用のコードを書きました。PaintComponentはタイルをペイントしないか、文字列を描画しません

私の問題は、グリッドが表示されないか、文字列が表示されないということです。 (コンパイラがすべてのエラーを表示しません。)

は、ここに私のコードです:事前に

public class Tile extends Board { 

    public Tile() { 

    } 

    final private static int CELL_WIDTH = 50; 
    final private static int CELL_HEIGHT = 50; 

    final private static int BOARD_X_OFFSET = 25; 
    final private static int BOARD_Y_OFFSET = 25; 

    private int x; 
    private int y; 

    private int getScreenX(int x, int y) { 
     return BOARD_X_OFFSET + x * CELL_WIDTH; 
    } 

    private int getScreenY(int x, int y) { 
     return BOARD_Y_OFFSET + y * CELL_HEIGHT; 
    } 

    public Tile(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     g.setColor(Color.BLACK); 
     g.drawRect(
       getScreenX(x, y), 
       getScreenY(x, y), 
       CELL_WIDTH, 
       CELL_HEIGHT); 

    } 

} 

おかげ

Board.java

public class Board extends JComponent implements KeyListener{ 

    public Board() { 

    } 

    public static String[] gameElements = new String[100]; 


    private String[][] map = new String[10][10]; 
    private String currentLevel = "1"; 
    private boolean paintComponentExecuted = false; 
    Player hero; 


    @Override 
    public void paintComponent(Graphics g) { 
     if(paintComponentExecuted == false) { 
      loadLevel(); 
      int i = 0; 
      int positionX = 50; 
      int positionY = 50; 
      for (int y = 0; y < map.length; y++) { 
       for (int x = 0; x < map.length; x++) { 
        new Tile(x, y).paintComponent(g); 
        g.drawString(gameElements[i], positionY, positionX); 
        map[y][x] = gameElements[i]; 
        positionY += 50; 
        System.out.print("[" + map[y][x] + "]"); 
        i++; 
       } 
       positionY = 50; 
       positionX += 50; 
       System.out.println(); 
       paintComponentExecuted = true; 

      } 
     } 
    } 

    public void readTextFile(String fileName) { 
     try { 
      FileReader fileReader = new FileReader(fileName + ".txt"); 
      BufferedReader buffer = new BufferedReader(fileReader); 
      String splitBy = ","; 
      String line = buffer.readLine(); 

      for (int i = 0; i < gameElements.length; i++) { 
       gameElements = line.split(splitBy); 
      } 

     } catch (FileNotFoundException ex) { 
      Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (IOException ex) { 
      Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public void loadLevel() { 
     readTextFile(currentLevel); 
    } 

    public static void main(String[] args) { 

     JFrame frame = new JFrame(); 
     frame.setSize(600, 600); 
     frame.setTitle("SleutelBarricade"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JComponent chart = new Board(); 
     frame.add(chart); 

     frame.setVisible(true); 


    } 

    @Override 
    public void keyTyped(KeyEvent e) { 

    } 

    @Override 
    public void keyPressed(KeyEvent e) { 

    } 

    @Override 
    public void keyReleased(KeyEvent e) { 

    } 
} 

Tile.java!

答えて

1

あなたはこの条件を削除する必要があります。

if(paintComponentExecuted == false) { 


    paintComponentExecuted = true; 
} 

が、そのブロックの内容の残りの部分を残します。ペイントを再塗装するのをブロックしないでください。さもなければ、あなたは一度だけそれを見ます。あなたは

for (int y = 0; y < tiles[0].length; y++) 
     for (int x = 0; x < tiles.length; x++) 
     tiles[x][y]=new Tile(x, y); 

はその後、paintComponentにあなたが

を呼び出す

コンストラクタの中で、このグローバル変数

Tile tiles=new Tile[10][10]; 

を持っていると仮定すると

あなたは、コンストラクタでタイルを作成する必要があります

tiles[x][y].paintComponent(g); 

また、あなたがボード上に描いているので、タイルは何も拡張しないほうがよいでしょう。たぶんこれが役立つでしょう。

関連する問題