一个JFrame上添加2个JPanel之后,第一个JPanel上的画东西会在第二个JPanel上显示

图片说明
右上角那个小的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里面的定时器里面重复调用了方法,我觉得问题可能就出在这附近,但不是很懂,请各路大神指点下咯。

1个回答

xiaolin_wxl
xiaolin_wxl 看不懂啊 感觉不是那么回事
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问