Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用paint方法创建类的对象_Java - Fatal编程技术网

Java 使用paint方法创建类的对象

Java 使用paint方法创建类的对象,java,Java,我创建了一个菜单,其中有一些选项可供选择。其中一个选项是“玩电脑”,这将启动游戏 JButton ai = new JButton("Play with computer"); ai.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { GameBoard play = new GameBoard();

我创建了一个菜单,其中有一些选项可供选择。其中一个选项是“玩电脑”,这将启动游戏

        JButton ai = new JButton("Play with computer");
    ai.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            GameBoard play = new GameBoard();
            hi.dispose(); //jframe
        }
    });
然后是游戏板:

@SuppressWarnings("serial")
public class GameBoard extends Canvas {
    private Image dbi;
    private Graphics db;
    private JFrame okno;
    Rectangle aiPaddle = new Rectangle(10, 590, 10, 50);
    Rectangle pPaddle = new Rectangle(10, 100, 10, 50);
    Rectangle ball = new Rectangle(560, 10, 10, 10);
    Player p = new Player(this);
    Ai a = new Ai(this);
    Ball b = new Ball(this);
    GameBoard() {
        okno = new JFrame();
        okno.setTitle("Pink Ponk");
        okno.setSize(600, 300);
        okno.getContentPane().setBackground(Color.black);
        okno.setResizable(false);
        okno.setVisible(true);
        okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        addKeyListener(p);
    }

    public static void main(String[] args) {
        GameBoard gra = new GameBoard();
        gra.okno.add(gra);
    }

    @Override
    public void update(Graphics g) {
        dbi = createImage(10, 50);
        db = dbi.getGraphics();
        paint(db);
        g.clearRect(0, 0, 600, 300);
        g.setColor(Color.white);
        g.drawRect(p.getX(), p.getY(), 10, 50);
        g.fillRect(p.getX(), p.getY(), 10, 50);
        g.drawOval(b.getX(), b.getY(), 10, 10);
        g.fillOval(b.getX(), b.getY(), 10, 10);
        g.drawRect(a.getX(), a.getY(), 10, 50);
        g.fillRect(a.getX(), a.getY(), 10, 50);
    }

    @Override
    public void paint(Graphics g) {
        pPaddle = new Rectangle(p.getX(), p.getY(), 10, 50);
        aiPaddle = new Rectangle(a.getX(), a.getY(), 10, 50);
        ball = new Rectangle(b.getX(), b.getY(), 10, 10);
        g.clearRect(0, 0, 600, 300);
        g.setColor(Color.white);
        g.drawRect(p.getX(), p.getY(), 10, 50);
        g.fillRect(p.getX(), p.getY(), 10, 50);
        g.drawOval(b.getX(), b.getY(), 10, 10);
        g.fillOval(b.getX(), b.getY(), 10, 10);
        g.drawRect(a.getX(), a.getY(), 10, 50);
        g.fillRect(a.getX(), a.getY(), 10, 50);
    }

}

我肯定它会起作用,但它不会。我得到了黑屏,没有任何矩形或椭圆形。来自其他类的线程正在工作,因为我仍在输掉游戏。:)

GameBoard构造器是在按下开始按钮时唯一调用的构造器,它创建一个新帧,设置其背景,并使其可见。但它不会向框架添加任何组件。您可能需要添加

okno.add(this);

但是请注意,画布的构造器并不真正负责显示一个框架并将其自身添加到此框架中。我会将框架创建移到构造函数之外。让构造函数做它应该做的事情:构造对象

还有一个问题:创建框架的最佳位置是什么?在action listener中:它负责创建包含画布的框架。当然,您可以将其委托给私有方法,并从操作侦听器调用此私有方法。