为什么我不能在JPanel中绘图?

时间:2016-06-07 14:54:12

标签: java swing

public void display() {

    pan.repaint();
    fen.add(pan);
    fen.addKeyListener(this);
    fen.setResizable(false);
    fen.setTitle("Le Jeu 2D");
    img.setText("Coucou");
    pan.add(img);
    pan.repaint();
    pan.setBackground(Color.yellow);
    fen.setVisible(true);
    fen.setSize(480, 272);
    pan.repaint();
    fen.revalidate();

}

public void paintComponent(Graphics g) {

    System.out.println("zzz");
    pan.paint(g);
    g.setColor(Color.red);
    g.drawRect(10, 10, 10, 10);
}

它没有任何吸引力。为什么?我已经定义了paint组件方法,所以我不明白为什么。 编辑:我编辑了我的代码,请看一下

3 个答案:

答案 0 :(得分:2)

您没有创建Game课程的实例,也不会将其添加到JFrame

以下是您正在绘制的游戏面板:

<强> Game.java

public class Game extends JPanel {
    @Override
    public final void paintComponent(final Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.red);
        g.drawRect(10, 10, 10, 10);
    }

    @Override
    public Dimension getMinimumSize() {
        return new Dimension(300, 300);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 300);
    }

    @Override
    public Dimension getMaximumSize() {
        return new Dimension(300, 300);
    }
}

然后,您需要创建此游戏面板的实例并将其添加到您的JFrame:

<强> GameFrame.java

public class GameFrame extends JFrame {
    public GameFrame() {
        setLocationRelativeTo(null);
        setResizable(false);
        setTitle("2D Game");
        Game game = new Game();
        setContentPane(game);
        pack();
        setVisible(true);
    }
}

然后,当您创建JFrame的实例时:

<强> Example.java

public class Example {
    public static void main(String[] args) {
        new GameFrame();
    }
}

将添加面板并绘制:

enter image description here

答案 1 :(得分:1)

您永远不会创建Game类的实例,也不会将Game类添加到框架中。即使你确实创建了一个实例,大小仍然是(0,0),所以没有什么可以画的。

基本上你的代码的整个结构是错误的。

我建议你重新开始,然后在Custom Painting的Swing教程中找到演示代码。

答案 2 :(得分:-1)

您的代码的基本结构似乎很奇怪。 您可以在主控制类中实例化JFrame,即。在这种情况下它应该是GAME类。然后,您可以创建一个新的JPanel类,并将其对象添加到JPanel对象中。在JPanel类中,您可以创建所需的所有元素并设置相应的参数。您还可以在内部类或单独的类中添加事件侦听器。