xiaolin_wxl 2017-07-12 08:25 采纳率: 100%
浏览 2828

一个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条回答 默认 最新

  • devmiao 2017-07-12 15:58
    关注
    评论

报告相同问题?

悬赏问题

  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败