将多个类实例添加到JFrame

时间:2016-01-04 00:32:56

标签: java swing jcomponent

我看到很多问题看起来像我的,我已经查看了所有的答案,但我似乎无法找到我需要的答案。

我正在制作一个Paddle课程和一个Ball课程。

在Ball类中,我有一个绘制和移动球的绘制方法。在我的Paddle课程中,我有一个绘制和移动球拍的绘画方法。在我的主要课程中,我有一个JFrame。

我想把我的球和桨类添加到我的 JFrame,但JFrame仅显示最后添加的类。我已经尝试将我的类添加到JPanel,然后将JPanel添加到JFrame,但这也不起作用。

下面显示的代码没有错误(我可能打错了)但只是在JFrame上显示了paddle。 (当我将球拍添加到框架后将球添加到框架中时,反之亦然)。我真的很感激任何答案!

public class game {
    JFrame frame = new JFrame();
    //set size and visibility and all the other things

    Ball ball = new Ball();
    frame.add(ball); 

    Paddle paddle = new Paddle();
    frame.add(paddle);

    //repeats code underneath every 10 milliseconds using swing timer
    ball.revalidate();
    ball.repaint();

    paddle.revalidate();
    paddle.repaint();
}

我的球类中的绘画方法如下所示:

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.fillOval(ballx, bally, balldiamter, balldiamter);
}

我的paddle类中的paint方法如下所示:

@Override 
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.fillRect(paddlex, paddley, paddleLength, paddleWidth);
}

1 个答案:

答案 0 :(得分:-2)

您应该制作一个可以更好地控制的自定义框架。

class MyFrame extends JFrame{
    MyFrame(String s){
        super(s);

        Ball ball = new Ball();
        add(ball); 

        Paddle paddle = new Paddle();
        add(paddle);
        setBounds(0, 0, SCREEN_HEIGHT, SCREEN_WIDTH);
        setVisible(true);
    }
    public void paint(Graphics g){
        ball.paint(g);
        paddle.paint(g);
    }
}

这可以使球更容易画球和划桨。另外,Ball和Paddle需要extends JPanel,他们需要有这样的绘制方法:

public void paint(Graphics g){
    g.drawRect(...); // your logic
}

另外,也许你自己的绘画方法有一些问题。