Java 访问jpn铭牌时出错为什么?
在我的代码中,它在if(collision())中给出了Ball类的move方法中的错误,因为它无法解析plate,Ball类的碰撞方法无法解析plate对象,即jpn.plate给出了错误,但当我在internet上看到此代码时,它工作正常,为什么 JPanel.javaJava 访问jpn铭牌时出错为什么?,java,Java,在我的代码中,它在if(collision())中给出了Ball类的move方法中的错误,因为它无法解析plate,Ball类的碰撞方法无法解析plate对象,即jpn.plate给出了错误,但当我在internet上看到此代码时,它工作正常,为什么 JPanel.java import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import j
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class JPanel extends JPanel {
int x = 0;
int y = 0;
Ball ball = new Ball(this);
Plate plate = new Plate(this);
void move() {// move
ball.move();
plate.move();
}
JPanel(){
//constructor
KeyListener k=new KeyListener(){
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
//System.out.println(KeyEvent.getKeyText(e.getKeyCode()));
plate.keyPressed(e);
@Override
}
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
plate.keyReleased(e); }
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
};
addKeyListener(k);
setFocusable(true);
}
public void paint(Graphics g) {// paint
super.paint(g);// pehle screen saaf karo pehle jaisi
setBackground(Color.black);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
ball.paint(g2d);
plate.paint(g2d);
// super.paint(g);//agar yaha to puri screen pehle jaisi saaf ho jaegi
}
public void gameOver() {
JOptionPane.showMessageDialog(this, "GameOver", "GameOver",
JOptionPane.YES_NO_OPTION);
System.exit(ABORT);
}
public static void main(String args[]) throws InterruptedException {// main
Jpanel jp = new Jpanel();
JFrame frame = new JFrame("Chota Bheem");
frame.add(jp);
frame.setBackground(Color.BLACK);
frame.setSize(500, 500);
frame.setVisible(true);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
while (true) {
jp.move();
jp.repaint();
Thread.sleep(2);
}
}
}
Ball.java
class Ball {
int x = 0;
int xs = -1, ys = -1;
int y = 0;
static final int DIAMETER = 30;
JPanel jpn;
Ball(JPanel jpn) {
this.jpn = jpn;
}
public void move() {
if (x + xs < 0) {
xs = 1;
} else if (y + ys < 0) {
ys = 1;
} else if (x + xs > jpn.getWidth() - 30) {
xs = -1;
} else if (y + ys > jpn.getHeight() - 30) {
ys = -1;
}
x = x + xs;
y = y + ys;
if (collision()) {
ys = -1;
y = jpn.plate.getTopY() - DIAMETER;
}
if (y + ys > 490) {
((Jpanel) jpn).gameOver();
}
}
public void paint(Graphics g) {
}
public Rectangle getBounds() {
return new Rectangle(x, y, DIAMETER, DIAMETER);
}
public boolean collision() {
return jpn.plate.getBounds().intersects(getBounds());
}
}
班级舞会{
int x=0;
intxs=-1,ys=-1;
int y=0;
静态最终内径=30;
JPanel jpn;
鲍尔(JPanel jpn){
this.jpn=jpn;
}
公开作废动议(){
if(x+xs<0){
xs=1;
}如果(y+ys<0),则为else{
ys=1;
}else if(x+xs>jpn.getWidth()-30){
xs=-1;
}如果(y+ys>jpn.getHeight()-30),则为else{
ys=-1;
}
x=x+xs;
y=y+ys;
if(碰撞()){
ys=-1;
y=jpn.plate.getTopY()-直径;
}
如果(y+y>490){
((Jpanel)jpn.gameOver();
}
}
公共空间涂料(图g){
}
公共矩形getBounds(){
返回新矩形(x,y,直径,直径);
}
公共布尔冲突(){
返回jpn.plate.getBounds().intersects(getBounds());
}
}
Plate.java
class Plate {
int x = 0;
int xa = 0;
Jpanel j;
static final int Y = 490;
static final int WIDTH = 60;
static final int HEIGHT = 10;
Plate(Jpanel j) {
this.j = j;
}
public void move() {
if (x + xa > 0 && x + xa < j.getWidth() - 60) {
x = x + xa;
}
}
public void paint(Graphics g) {
g.setColor(Color.GRAY);
g.fillRect(x, 450, WIDTH, HEIGHT);
}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
xa = -1;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
xa = 1;
}
}
public void keyReleased(KeyEvent e) {
xa = 0;
}
public Rectangle getBounds() {
return new Rectangle(x, Y, WIDTH, HEIGHT);
}
public int getTop() {
return Y;
}
}
类标牌{
int x=0;
int-xa=0;
Jpanel j;
静态最终积分Y=490;
静态最终整数宽度=60;
静态最终内部高度=10;
板(Jpanel j){
这个。j=j;
}
公开作废动议(){
如果(x+xa>0&&x+xa
在您的类Ball
,Jpanel
对象jpn
从来没有属性牌,java的Jpanel
也没有属性牌。因此,您得到了错误
我重命名了名为JPanel
的类,该类将JPanel
扩展为JalPan
,因为它导致了一个错误
编辑:
以下是你的3门课:
“当我在互联网上看到这段代码时,它运行良好”-然后将你的代码与你在互联网上找到的代码进行比较,找出区别。请提供一个。这可能是我迄今为止在这里看到的最糟糕的格式化代码。如果你真的需要帮助,你能至少花点精力让你的代码可读吗?这是在edu4java.com网站上给出的,即使我无法理解它为什么通过Jpanel访问plate。这就是我发布它的原因,请更正它。@SuZure-下载文件,然后运行它。没有人会为您更正/更正代码。如果你不知道一些具体的事情,比如如何做,我们可以帮助你。但是你要我做你想做的事,请打电话给我的办公室,下订单,预付款,然后拿走你的软件。谢谢