JPanel没有在JFrame中绘画

时间:2013-01-29 21:31:37

标签: image graphics jpanel repaint paintcomponent

我对java很新,决定制作2D游戏。我正在尝试绘制面板,但它根本不起作用。我用JFrames完成了同样的事情并且它有效,但是如果可能的话我想让它与JPanels一起工作。这是一些代码

这是一个仅用于绘制地图的类。图像从枚举中调用

   //called in paint method for panel
public void draw(Graphics2D g2){
    sLevel1.setupRect();
    for(int i = 0; i < 24; i++){
        for(int e = 0; i < 24; i++){
            if(level1.worldDat[i][e] != 0){
                int c = level1.worldDat[i][e];
                if(i == 1){
                    g2.drawImage(Toolkit.getDefaultToolkit().getImage(eBlocks.GRASS1.getPath()), e*20, i*20, null);
                }else if(i == 2){
                    g2.drawImage(Toolkit.getDefaultToolkit().getImage(eBlocks.GRASS2.getPath()), e*20, i*20, null);
                }else if(i == 3){
                    g2.drawImage(Toolkit.getDefaultToolkit().getImage(eBlocks.GRASS3.getPath()), e*20, i*20, null);
                }else if(i == 5){
                    g2.drawImage(Toolkit.getDefaultToolkit().getImage(eBlocks.BORDER.getPath()), e*20, i*20, null);
                }else{
                    g2.drawImage(Toolkit.getDefaultToolkit().getImage(eBlocks.NULL.getPath()), e*20, i*20, null);
                }
            }
        }
    }

}

这是在面板中调用的地方,

    @Override
public void paintComponent(Graphics g){     
    Graphics2D g2 = (Graphics2D) g;
    super.paintComponent(g2);
    worldDraw.draw(g2);
}

最后这是在JFrame中添加的地方,定时器用于重绘

    public mainGameFrame() {
    super("Tile Game");
    setResizable(false);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 510, 525);

    //i also tried add, didnt work either
    setContentPane(gamePanel);

    addKeyListener(this);

    Timer time = new Timer(32, new ActionListener(){
        public void actionPerformed(ActionEvent e){
            repaint();
            gamePanel.repaint();
        }
    });

    time.start();
}

1 个答案:

答案 0 :(得分:0)

我不确切地知道你要做什么以及它为什么不起作用(你试过用调试器来解决它吗?你发现了什么?),但这是基于你的信息我的推荐供应。

暂时摆脱draw()方法(如果你愿意,可以发表评论)。相反,请在paint()方法中执行此操作:

public void paint( Graphics g ) {
    super.paint( g );

    // draw something simple here, just so you know it's getting called, like a filled Rect
    g.setColor( Color.BLUE );
    g.fillRect( 0, 0, 50, 50 );

    // try drawing the image later, after you verify this is being called with your rect
//    Graphics2D g2 = (Graphics2D)g;
//    g2.drawImage( Toolkit.getDefaultToolkit().getImage(eBlocks.GRASS1.getPath()), e*20, i*20, null);
}

如果你的填充矩形有效,但你的图像没有,你就知道你的图像有问题了,你可以沿着修复它的道路前进。

这里的信息真的不多,但你的问题也没有太多信息。如果我确切地知道什么是错的,我可以给出更好的回应。 “它根本不起作用”并不是很多。