好的,我在过去一小时或更长时间内一直在努力修补它。我想把玩家类和小程序分开,因为当我向玩家类添加更多内容时,它会更有条理。但是,因为我这样做了,我在错误后出错了,我有另一个类似于这个文件的文件,它在相同的文件中绘制applet,没有错误和运行。我一步一步地看着它仍然找不到它。所以我希望有人能解释为什么我会得到这三个错误。
player.java
package com.powder.game;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class player implements KeyListener{
private Rectangle rect;
public void init(){
rect = new Rectangle(10, 10, 50, 50); // make the rectangle
this.addKeyListener(this); // Listens to see if Rectangle is pressed
}
public void paint(Graphics e){
super.paint(e);
Graphics2D g2 = (Graphics2D) e;
g2.setColor(Color.RED); // Sets a color for the rectangle
g2.fill(rect);
}
public void keyTyped(KeyEvent e){
}
@Override
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_E){
rect.setLocation(rect.x, rect.y-10);
}
if(e.getKeyCode() == KeyEvent.VK_S){
rect.setLocation(rect.x-10, rect.y);
}
if(e.getKeyCode() == KeyEvent.VK_D){
rect.setLocation(rect.x, rect.y+10);
}
if(e.getKeyCode() == KeyEvent.VK_F){
rect.setLocation(rect.x+10, rect.y);
}
repaint();
}
public void KeyReleased(KeyEvent e){
}
}
MyFrameInit.java
package com.powder.game;
import javax.swing.*;
import java.applet.*;
import java.awt.*;
import java.util.*;
import java.io.IOException;
import java.lang.Math;
import javax.swing.ImageIcon;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import com.powder.game.player;
public class MyFrameInit extends Applet {
player p = new player();
public void paint(Graphics g){
super.paint(g); // Super calls the parent
g.setColor(Color.BLUE); // Setting color for g (background)
g.fillRect(0, 0, 600, 400); // fill the background blue at x,y,width,height
this.setSize(600, 400); // Set the size of the applet
p.init();
}
}
很抱歉,如果页面格式不正确。仍在努力理解这一点。我已经习惯了标签lol。
编辑:所以,我将Applet扩展到了播放器,它几乎修复了我刚添加的所有内容public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
到最后它开始起作用了。现在我唯一的问题是,当我在player.java中转到init()之后,它不会保留MyFrameInit.java我怎么能解决这个问题?
答案 0 :(得分:1)
Player
没有方法......
addKeyListener
repaint
它不会从任何东西继承,因此它无法调用...
super.paint
,因为它的父类没有这种方法...... 你不能打电话给你没有......
Player
不符合KeyListener
界面的合同要求,但未实现
public void keyReleased(KeyEvent e)
绘画用于绘制组件的当前状态,您不应该在任何绘制方法中修改组件或任何子组件的状态,因为这会产生无限重绘的循环
不要这样做:
this.setSize(600, 400); // Set the size of the applet
- 您永远不应该尝试设置小程序的大小,大小由HTML标记确定p.init();
。您的paint
方法将在程序的生命周期中被调用很多次,初始化对象需要在调用之间保持状态JApplet
代替Applet
Player
扩展您的JPanel
;覆盖它的paintComponent
方法而不是它的paint
方法(而不是调用super.paintComponent
);覆盖它的getPreferredSize
方法并为组件返回合理的默认大小add
Player
到JApplet
... KeyListener
,请参阅How to Use Key Bindings。这将为你节省几天的头痛和挫折感。