- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:Main.repaint() 对我不起作用。 repaint() 不会调用 Main 中的绘制方法。我尝试在重新绘制之前调用 validate 但没有成功。主要绘画最初或调整大小时完美,但当我在代码中调用 repaint() 时,什么也没有发生。
这是该程序到目前为止的样子 link
所以我试图用java为游戏创建一个关卡选择屏幕。我的游戏是 JApplet。我的结构如下:
我的 Main 类扩展了 JApplet 并包含一个对象LevelScreen类
LevelScreen 有一个 Main 调用的绘制方法。
我试图避免使用 Swing,因为布局管理器给我的设计带来了麻烦。所以我尝试制作一个更简单、更适合我的需要的结构。
Main.java中的paint()
public class Main extends JApplet {
public static final int WIDTH = 700, HEIGHT = 500;
private static Main instance;
private LevelScreen levelScreen = new LevelScreen();
private View view = View.LEVELSCREEN;
public static Main getInstance() {
if (instance == null)
instance = new Main();
return instance;
}
@Override
public void init() {
setSize(WIDTH, HEIGHT);
addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
Point p = e.getPoint();
if (view == View.LEVELSCREEN) {
levelScreen.mouseMoved(p);
}
}
});
}
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
if (view == View.LEVELSCREEN)
levelScreen.paint(g2);
}
public enum View {
GAME, LEVELSCREEN;
}
}
在我的按钮代码中,我尝试重新绘制 Main,因为我想在鼠标离开按钮时制作淡出动画。我的问题是我无法使用 repaint() 调用 main 中的paint(Graphics g)
这里我调用repaint():
public void mouseExited() {
//start new thread to make fade out animation when mouse leave
mouseOver = false;
TimerTask task = new TimerTask() {
@Override
public void run() {
while (!mouseOver && opacity > 0.6) {
opacity -= 0.02;
//set level to 999 so i can see if the game repaints()
level = 999;
Main.getInstance().repaint(); //this doesnt work!!
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
new Thread(task).start();
}
最佳答案
这是您实现单例设计模式的方式的问题。您执行此操作的方式不适用于小程序,其中实例是由小程序容器为您创建的。您可以通过更改 getInstance
来修复它,如下所示:
public Main getInstance() {
return instance;
}
并将此行添加到 init
方法中:
instance = this;
<小时/>
顺便说一句,您不应该重写 Swing 组件中的 paint
,而 JApplet
就是这样。您应该重写paintComponent
,并在第一行调用super.paintComponent(g)
。这应该可以解决问题。
关于java - JApplet repaint() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19483662/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!