右上角那个小的JPanel我是没有加网格的,还有就是左边那个正在掉的“L”也出现在右边了。
下面贴上我有关的代码:
main方法里关于JFrame和JPanel的设置,
JFrame jf=new JFrame("Tetirs");
TetirsGame game=new TetirsGame();
jf.setLayout(null);//设置为空布局,自定义
jf.getContentPane().setBackground(Color.cyan);//设置窗口的背景色
jf.setSize(600, 657);//设置窗口大小
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setAlwaysOnTop(true);
jf.setLocationRelativeTo(null);
game.setBackground(Color.white);
game.setBounds(5, 5, WIDTH, HEIGHT);//将game放在jf的哪个位置,宽高
game.action(jf);
jf.getContentPane().add(game);//将game添加到jf上
drawOther(jf,game);//画其他的JLabel等东西
jf.getContentPane().add(scbd);
scbd.setBackground(Color.cyan);//scbd是一个静态的小面板的对象
scbd.setBounds(460, 50, 80, 80);
我在大的JPanel里面的定时器里调用了这个:
scbd.drawScoreBoard(tetrominos[1]);//在大面板的定时器里调用小面板的画“下一个”的方法
这个方法是这样的:
public void drawScoreBoard(Tetromino tero) {
this.t=tero;
repaint();
}
public void paint(Graphics g) {
if(t!=null && t.state ==Tetromino.INACTIVE) {
while(t.centerCell.getRow() >60 ||t.cell_1.getRow()>60 ||
t.cell_2.getRow()>60 || t.cell_3.getRow()>60 ) {
t.leftMove();
}
while(t.centerCell.getRow() <0 ||t.cell_1.getRow() < 0 ||
t.cell_2.getRow()<0 || t.cell_3.getRow()<0 ) {
t.rightMove();
}
while(t.centerCell.getCol() >60 ||t.cell_1.getCol() >60 ||
t.cell_2.getCol() >60 || t.cell_3.getCol() >60 ) {
t.centerCell.setCol(t.centerCell.getCol()-20);
t.getTetromino();
}
while(t.centerCell.getCol()<0 ||t.cell_1.getCol() <0 ||
t.cell_2.getCol() <0 || t.cell_3.getCol() <0 ) {
t.downMove();
}
BufferedImage image=t.getImage();
g.drawImage(image, t.centerCell.getRow(), t.centerCell.getCol(), null);
g.drawImage(image, t.cell_1.getRow(), t.cell_1.getCol(), null);
g.drawImage(image, t.cell_2.getRow(), t.cell_2.getCol(), null);
g.drawImage(image, t.cell_3.getRow(), t.cell_3.getCol(), null);
}
}
我的game是继承了JPanel的,主要逻辑也都在这里面,
因为我要在小的JPanel里面画game里面的Tetrominos[1],而且Tetrominos[1]是不断变化的。我就在game里面的定时器里面重复调用了方法,我觉得问题可能就出在这附近,但不是很懂,请各路大神指点下咯。