首页 > 解决方案 > Java JPanel 清除图形

问题描述

我正在用java创建一个蛇游戏我正在制作我的菜单,按下开始后它会打开游戏。我想在你按下开始后增加额外的难度,但不知道如何清除我从屏幕上绘制的内容,并且不想每次都不断打开更多的 JFrame(所以它不会滞后或导致错误稍后的)。

import java.awt.event.*;
import java.awt.image.BufferStrategy;
import java.awt.*;
import javax.swing.*;
import java.util.Random;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;

class Menu1 extends JPanel {
    private static final long serialVersionUID = 1138641784482936196L;

    protected static boolean clickStart = false;
    private final int UNITS = 25;
    private final int BUTTON_WIDTH = UNITS * 10;
    private final int BUTTON_HEIGHT = UNITS * 3;
    private Rectangle bounds;
    Handler handler = new Handler();
    private BufferedImage image;

    public Menu1() {
        this.setPreferredSize(new Dimension(Panel.SCREEN_WIDTH, Panel.SCREEN_HEIGHT));
        this.setBackground(Color.BLACK);
        // * Note to self: add settings with background color change
        this.addMouseListener(handler);
        this.addMouseMotionListener(handler);
        this.setFocusable(true);
    }

    public void paintComponent(Graphics g) {
        startImage();
        g.setColor(Color.BLACK);
        int x = 13 * (UNITS / 2);
        int y = 6 * UNITS;
        g.drawImage(image, x, y, BUTTON_WIDTH + 2, BUTTON_HEIGHT * 2, null);

        bounds = new Rectangle(x, y, BUTTON_WIDTH + 2, BUTTON_HEIGHT * 2);
        g.setFont(new Font("Gill Sans", Font.PLAIN, 35));
        g.setColor(Color.white);
    }

    public void startImage() {
        try {
            image = ImageIO.read(getClass().getResourceAsStream("StartButton.png"));
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    private class Handler implements MouseListener, MouseMotionListener {
        @Override
        public void mouseClicked(MouseEvent e) {
        }

        @Override
        public void mouseReleased(MouseEvent e) {
            if (bounds.contains(e.getX(), e.getY())) {
                new PlayFrame();
                // creates a new PlayFrame
                GameFrame.gameFrame.dispose();
                // disposes the old frame
            }
        }

        @Override
        public void mousePressed(MouseEvent e) {

        }

        @Override
        public void mouseExited(MouseEvent e) {
            System.out.println("Start Area Exited");
        }

        @Override
        public void mouseEntered(MouseEvent e) {
            System.out.println("Start Area Entered");
        }

        @Override
        public void mouseDragged(MouseEvent e) {
            System.out.println("Dragged");
        }

        @Override
        public void mouseMoved(MouseEvent e) {

        }
    }
}

标签: java

解决方案


推荐阅读