为什么JPanel不显示在Frame上?

时间:2014-07-19 19:21:30

标签: java swing

我得到了以下代码,这是我所遇到的实际问题的缩短版本:

import javax.swing.*;
import java.awt.*;

public class Circle {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame frame = new JFrame();
        Painter panel = new Painter();
        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(panel, BorderLayout.CENTER);


        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }






    import javax.swing.*;
    import java.awt.*;


    public class Painter extends JPanel{

        /**
         * 
         */
        private static final long serialVersionUID = 5663520834139683160L;
        /**
         * @param args
         */



        Painter()
        {
        }

        public void drawPlayer(Graphics g)
        {
            g.setColor(Color.GREEN);
            g.fillOval(0, 0, 200, 30);
            //g.setColor(Color.GREEN);
            //g.drawRect(0, 0, 80, 50);
            //g.setColor(Color.BLUE);
            //g.fillRect(0, 0, 80/2, 50/2);
            //g.setColor(Color.BLACK);
            //g.drawString("BOB", 10/2+10, 5/2);
        }

        @Override

        public void printComponent(Graphics g)
        {
            super.paintComponent(g);
            this.drawPlayer(g);
        }
    }

当我执行它时,JPanel没有出现,我只是找不到错误。

不知道这是否重要,但在实际问题中,我在构造函数中使用JPanels初始化JFrame,但它也不起作用。

如有必要,我可以发布原始代码。实际的任务是为ConnectFour游戏提供一个GUI,其中Frame被划分为绘制光盘的JPanel和另一个提供播放器信息(如名称等)的JPanel。第一部分工作正常,但最后一部分不起作用。 (不要被这个代码混淆,我发布了一个圆圈。我想发布解决方案的结构,我正在考虑为玩家信息面板。)

1 个答案:

答案 0 :(得分:2)

  

为什么JPanel不会显示在Frame上?

应该覆盖paintComponent()方法,而不是printComponent()方法

@Override
public void paintComponent(Graphics g) {
     super.paintComponent(g);
     this.drawPlayer(g);
}