2016-04-25 7 views
0

Ich versuche gerade, ein Bild (alien.png) zu machen, um sich zufällig auf dem Bildschirm zu bewegen und sobald es die Wände trifft, kommt es zurück. Ich habe tatsächlich so viele Probleme damit, dass ich einfach keinen Weg finde, das Bild hochzuladen und es herumspringen zu lassen. das ist, was ich bisher habe, aber ich habe eine Menge FehlerProbleme mit einfacher Animation auf Bild

package animationdemo; 


import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.Toolkit; 

import javax.swing.JPanel; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class AnimationDemo extends JFrame { 
    public AnimationDemo() { 

    Image alien; 
    alien = ToolKit.getDefaultToolkit().getImage("alien.png"); 
     Timer timer = new Timer(50, this); 
    timer.start(); 
    } 
    public static void main(String[] args) { 
    AnimationDemo frame = new AnimationDemo(); 
    frame.setTitle("AnimationDemo"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(300, 300); 
    frame.setVisible(true); 
    } 
} 

class MovingMessagePanel extends JPanel implements ActionListener { 
    public int xCoordinate = 20; 
    public int yCoordinate = 20; 
    public int xDir=5; 
    public int yDir=5; 


    public void actionPerformed(ActionEvent e) { 
    repaint(); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    if (xCoordinate > getWidth()) xDir*=-1; 
    if (yCoordinate > getHeight()) yDir*=-1; 
    if (xCoordinate <0) xDir*=-1; 
    if (yCoordinate <0) yDir*=-1; 
    xCoordinate += xDir; 
    yCoordinate += yDir; 
    g.drawImage(alien,xCoordinate,yCoordinate,this); 
    } 
} 

Heres einige der Fehler immer ich

AnimationDemo.java:18: error: cannot find symbol 
    alien = ToolKit.getDefaultToolkit().getImage("alien.png"); 
      ^
    symbol: variable ToolKit 
    location: class AnimationDemo 
AnimationDemo.java:19: error: incompatible types: AnimationDemo cannot be converted to ActionListener 
     Timer timer = new Timer(50, this); 
            ^
AnimationDemo.java:52: error: cannot find symbol 
    g.drawImage(alien,xCoordinate,yCoordinate,this); 
       ^
    symbol: variable alien 
    location: class MovingMessagePanel 
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 
3 errors 

bekommen Ich bin nur nicht sicher, warum es nicht finden Toolkit sogar dachte ich importiert es ich bin nicht sicher, auch, warum es nicht das fremde png auf die erläuternden

+0

Ah, Sie Toolkit nicht richtig kapitalisieren.Sie müssen vorsichtiger sein. –

+0

Setzen Sie Ihre Logik nicht in die paintComponent-Methode, Farben passieren zu jeder Zeit, die Ihre Updates ruinieren könnten – MadProgrammer

Antwort

1

die Fehler sind selbst g.drawImage erkennen:

AnimationDemo.java:18: error: cannot find symbol 
    alien = ToolKit.getDefaultToolkit().getImage("alien.png"); 
      ^
    symbol: variable ToolKit 
    location: class AnimationDemo 

Sie kapitalisieren Toolkit falsch. Sie müssen genau und vorsichtig sein, um diese Fehler zu vermeiden.

AnimationDemo.java:19: error: incompatible types: AnimationDemo cannot be converted to ActionListener 
     Timer timer = new Timer(50, this); 
            ^

AnimationDemo Klasse nicht implementiert Action, und so können Sie es nicht als solche verwendet werden.

AnimationDemo.java:52: error: cannot find symbol 
    g.drawImage(alien,xCoordinate,yCoordinate,this); 
       ^
    symbol: variable alien 
    location: class MovingMessagePanel 

Der Ausländer Variable ist im Programm nicht sichtbar, da es in einem Konstruktor oder eine Methode und nicht in der Klasse deklariert wird.

1

Nun, es gibt einige Dinge, die ich denke, könnte das Problem sein. erste ToolKit.getDefaultToolkit() Sie verschiedene Toolkits sind reffering dass java.awt.Toolkit.getDefaultToolkit() zweite ändern ist Timer timer = new Timer(50, this); Sie kann nicht Ihre aktuelle Objekt hinzufügen, die ein JFrame als Parameter ist im Timer-Konstruktor Sie actionlistner in der AnimationDemo implementieren Klasse, oder Sie können es auf diese Weise in Ihrem con

Timer timer = new Timer(50,new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       //your action 
      } 
     }); 
    timer.start(); 

dritte ist Image alien; sein eine lokale Variable erklärt tun structor ist für dein jpanel nicht sichtbar. erklären Image alien; in Ihrem JFrame Klasse (eine Instanzvariable)

Image alien; 
public AnimationDemo() { 
alien = ToolKit.getDefaultToolkit().getImage("alien.png"); 
    } 
1

Hallo
Wie bereits gesagt, dass die Fehler selbsterklärend sind, habe ich die Fehler behoben und verändert den Code, die fein arbeiten werden, nun das Bild bewegt, sind die folgenden Modifikationen
1.Give von Bild vollständigen Pfad zu
Timer 3.PASS MovingMessagePanel Objekt
2.Create MovingMessagePanel Objekt und stellen fremde Objekt Toolkit
4.In Konstruktor AnimationDemothis.add(messagePannel); so dass das Panel sichtbar ist

import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

public class AnimationDemo extends JFrame { 
    Image alien; 
    public AnimationDemo() { 


    alien = Toolkit.getDefaultToolkit().getImage("/<Fully Qualified Path>/alien.png"); 
    MovingMessagePanel messagePannel = new MovingMessagePanel();//Pass this object to Timer 
    messagePannel.alien = this.alien; 
     Timer timer = new Timer(50, messagePannel); 
    timer.start(); 
    //Add MovingMessagePanel object to JFrame then only it will be visible 
    this.add(messagePannel); 
    } 
    public static void main(String[] args) { 
    AnimationDemo frame = new AnimationDemo(); 
    frame.setTitle("AnimationDemo"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(500, 500); 
    frame.setVisible(true); 
    } 

} 

class MovingMessagePanel extends JPanel implements ActionListener { 
    public int xCoordinate = 20; 
    public int yCoordinate = 20; 
    public int xDir=5; 
    public int yDir=5; 
    public Image alien;//initialize this with the image 

    public void actionPerformed(ActionEvent e) { 
    repaint(); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    if (xCoordinate > getWidth()) xDir*=-1; 
    if (yCoordinate > getHeight()) yDir*=-1; 
    if (xCoordinate <0) xDir*=-1; 
    if (yCoordinate <0) yDir*=-1; 
    xCoordinate += xDir; 
    yCoordinate += yDir; 
    g.drawImage(alien,xCoordinate,yCoordinate,this); 
    } 
} 
+0

Ich habe den vollständigen Pfad und alles außer Theres immer noch nichts auf dem Bildschirm –

+0

Können Sie versuchen, das Image mit 'ImageIO zu laden 'innerhalb von' Toolkit' wie unten 'try {alien = ImageIO.read (neue Datei ("/ /alien.png "));} catch (IOException e) {System.out.println (" Datei Nicht gefunden ");}' dann überprüfen Sie, ob Sie das Bild laden können oder nicht – user6249479