我理解如何制作二维阵列网格。我尝试将随机数放入其中,但我不知道如何在jframe上绘制它们。例如,0表示红色圆圈,1表示绿色圆圈,依此类推。我需要弄清楚如何用网格方式表示它们。
public class Game {
public static void initGrid(){
//clumn and row 4 x 4
int col = 4;
int row = 4;
//initialize 2d grid array
int[][] a = new int[row][col];
Random rand = new Random();
//for loop to fill it with random number
for(int x = 0 ; x < col ; x++) {
for(int y = 0; y < row; y++) {
a[x][y] = (int) rand.nextInt(4);
System.out.print(a[x][y]);
}//inner for
System.out.println();
}//outer for
}//method
public static void main(String[] args){
initGrid();
}
}
我理解JFrame和JPanel就绘制空白画布而不是我想要的方式。我希望将两种代码结合起来,但我的知识有限。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Game2 extends JPanel{
@Override
public void paint(Graphics g){
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.RED);
g2d.fillOval(0, 0, 30, 30);
g2d.drawOval(0, 50, 30, 30);
g2d.fillRect(50, 0, 30, 30);
g2d.drawRect(50, 50, 30, 30);
g2d.draw(new Ellipse2D.Double(0, 100, 30 ,30));
}
public static void main(String[] args){
JFrame frame = new JFrame("Mini Tennis");
frame.add(new Game2());
frame.setSize(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
答案 0 :(得分:1)
我的建议是:
将Game
类作为参数传递给Game2
的构造函数,并将其存储为Game2
类中的局部变量,如下所示:
Game game;
public Game2(Game game){
this.game = game;
//Rest of your constructor.
}
接下来,您在Game
类中声明一个getter方法,以检索存储位置网格的数组,如下所示:
public int[][] getPositions(){
return this.a;
}
创建一个方法,根据存储为网格元素的int
值返回要绘制的颜色,如下所示:
private Color getColor(int col){
switch(col){
case 0:
return Color.red;
case 1:
.
.
.
.
}
}
现在,不要覆盖paint
类的Game2
方法,而是覆盖paintComponent
并在paintComponent
方法中绘制圆圈(如图所示)认为圆圈的直径为30px,间隙为20px):
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
int[][] pos = this.game.getPositions();
for(int i = 0; i < pos.length; i++){
for(int j = 0; j < pos[i].length; j++){
g2d.setColor(getColor(pos[i][j]));
g2d.fillOval(i*50, j*50, 30, 30);
}
}
}
我希望这可以解决从代表视图的Game
类访问代表模型的Game2
的问题。