康威生命游戏图形用户界面

4
我一直在为课程制作康威生命游戏的副本,但当GUI渲染时出现了问题。
简单来说: GUI创建了一个Frame和一个主面板,设置为边界布局。
一旦我实例化Grid并将其分配给主面板,它应该显示我的2D数组中的网格,但实际上没有。我已经苦思冥想了两个小时。
顺便说一下,在此过程中我无法使用GUI构建的IDE。以下是代码: GUI
           import java.awt.*;
import java.awt.event.*;
import java.awt.Color;
import java.awt.GridBagLayout;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.*;
import java.util.Observer;
import java.util.Observable;

public class GameOfLifeGUI extends JFrame implements Observer {

    private JPanel mainPanel;
    private JPanel gridPanel;
    private JPanel startPanel;
    private JPanel titlePanel;
    private JButton start;
    private Cell cell;
    private Grid grid;
    private MouseEvent mouseClicked;
    private MouseEvent mouseDragged;
    private MouseEvent mousePressed;
    private MouseEvent mouseRelease;
    private MouseListener mouseListener;

    public GameOfLifeGUI() {
        super("");
        //Create Start Button for startPanel
        JButton start = new JButton("Start");

        //Creates a Grid to add to the panel
        grid = new Grid(75,75);

        //Create JPanels
        mainPanel = new JPanel();
        gridPanel = new JPanel();
        startPanel = new JPanel();
        titlePanel = new JPanel();

        /**
         * Add Grid to gridPanel
         * Modify Grid(int, int) to change size of Grid. Per spec, this grid should always be 75x75
         */

        //Create gridPanel
        gridPanel.setLayout(new GridLayout(75,75));
        gridPanel.setBackground(Color.WHITE);
        gridPanel.add(grid);

        //Set Layout of Panels
        mainPanel.setLayout(new BorderLayout());
        mainPanel.add(gridPanel, BorderLayout.CENTER);
        mainPanel.add(startPanel, BorderLayout.SOUTH);
        mainPanel.add(titlePanel, BorderLayout.NORTH);

        //Add Start Button to startPanel
        startPanel.add(start);

        //Creates a window for displaying the GUI
        this.setTitle("Conway's Game of Life");
        this.setSize(1000, 750);
        this.setLocationRelativeTo(null);
        this.add(mainPanel);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);

    }//end Constructor

网格

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.Component;
import java.awt.Color;
import javax.swing.JPanel.*;
import java.util.Observer;
import java.util.Arrays;
import java.util.Observable;

public class Grid extends JPanel{

  private Cell[][] grid;
  private int column;
  private int row;

  /**
   * Constructs a Grid of Cells
   * columns is a column of cells
   * rows is a row of cells
   */

  public Grid(int column, int row){
    this.column = column;
    this.row = row;

    // create a grid of cells
    grid = new Cell[row][column];
    for (int r = 0; r < row; r++){
      for (int c = 0; c < column; c++){
        grid[r][c] = new Cell(r,c);
      }
    }
    //Creates a border of cells around grid for edge case handling
    //All cells in this border will be dead and incapable of living
    for (int c = 0; c < column; c++){
        grid[0][c] = new Cell(row, column);
    }
    for (int c = 0; c < column-1; c++){
        grid[row-1][c] = new Cell(row, column);
    }
    for (int r = 0; r < row; r++){
        grid[r][0] = new Cell(row, column);
    }
    for (int r = 0; r < row-1; r++){
        grid[r][column - 1] = new Cell(row, column);
    }
  }//end Constructor

如果您需要更多信息,请让我知道 - 我不想在第一篇文章中附加大量代码。

1
画网格的代码在哪里?这只是布局。在子组件上调用setVisible,甚至在将其附加到父组件之前这样做是没有意义的。 - Marko Topolnik
网格存在于它自己的类中 - 你想要查看Grid类还是GUI构建的其余部分? - hedrick
网格作为一个模型类并不重要,但是可视化它的代码非常重要。请粘贴相关的可视化代码部分。 - Marko Topolnik
实际的网格从未显示。我认为问题出在实际网格的构建方式上。 - hedrick
1
@shedri1:只是一个小建议,继承 JFrame 的类不应该包含其他内容,在其他类中准备你的面板,最后调用那个类来为这个JFrame创建内容面板,这样你就可以轻松地将其适用于JApplet,以防将来你想要实现它作为Java Web Start :-) - nIcE cOw
显示剩余5条评论
1个回答

2
Grid类没有paintComponent方法。使用Java图形类中的drawRect()方法进行简单的嵌套for循环可以解决此问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接