java - 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) {
}
}
}
解决方案
推荐阅读
- ios - 如何在 swift 5 中从另一个控制器重新加载 UIViewController
- angularjs - 使用带有 AngularJS 的 trustAsHtml 显示来自输入的文本
- java - 如何在 CARML 中使用 JSONata?
- javascript - 通过计时器从状态中删除项目
- pandas - 将数据框与包含它的较大数据框相交并删除公共行
- c# - 分配字符串/匿名方法时的空引用
- angular - 错误单元测试Angular 8 / Jasmine / Karma:RangeError:超出最大调用堆栈大小
- javascript - 删除订阅
- c# - 当具有(键盘)焦点的子项被移除时,将(键盘)焦点设置为父容器
- javascript - 使用自定义属性获取表内的输入值