2016-06-01 19 views
1

Ich erstelle eine einfache GUI, die 3 PNGs über den Bildschirm bewegt, aber es funktioniert nicht richtig. HierEinfache GUI, die 3 PNGs über den Bildschirm bewegt - funktioniert nicht richtig

ist der Code, den ich habe ich neu bin auf GUI und Swing, so gibt es einige sehr einfache alltägliche Fehler sein kann, und ich entschuldige mich für sie hier gehen Sie:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
public class MovingPictures extends JPanel implements ActionListener 
{ 
private Timer timer; 
Stars star; 
public MovingPictures() 
{ 
    setPreferredSize(new Dimension(800,800)); 

    timer = new Timer(1,this); 
    timer.addActionListener(this); 
    timer.start(); 
} 

public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    g.drawImage(star.getStar(),star.getStarX(),star.getStarY(),null); 
    g.drawImage(star.getStar2(),star.getStar2X(),star.getStar2Y(),null); 
    g.drawImage(star.getStar3(),star.getStar3X(),star.getStar3Y(),null); 
} 

public void actionPerformed(ActionEvent e) 
{ 
    star.up(); 
    star.across(); 
    star.diagonal(); 
    repaint(); 
} 

public class Stars 
    { 
    private Image stars; 
    private Image stars2; 
    private Image stars3; 
    private int starX; 
    private int starY; 
    private int star2X; 
    private int star2Y; 
    private int star3X; 
    private int star3Y; 
    public Stars() 
     { 
     stars = new ImageIcon("star.png").getImage(); 
     stars2 = new ImageIcon("star2.png").getImage(); 
     stars3 = new ImageIcon("star3.png").getImage(); 
     starX = 0; 
     starY = 50; 
     star2X = 100; 
     star2Y = 0; 
     star3X = 0; 
     star3Y = 0; 
    } 

    public void up() 
    { 
     if(starY == 790) 
      starY = 0; 
     else 
      starY += 2; 

    } 

    public void across() 
    { 
     if(star2X == 790) 
      star2X = 0; 
     else 
      star2X +=2; 
    } 

    public void diagonal() 
    { 
     if (star3X == 790) 
     { 
      star3X=0; 
      star3Y =0; 
     } 
     else 
     { 
      star3X += 2; 
      star3Y += 2; 
     } 
    } 

    public int getStarX() 
    { 
     return starX; 
    } 

    public int getStarY() 
    { 
     return starY; 
    } 

    public int getStar2X() 
    { 
     return star2X; 
    } 

    public int getStar2Y() 
    { 
     return star2Y; 
    } 

    public int getStar3X() 
    { 
     return star3X; 
    } 

    public int getStar3Y() 
    { 
     return star3Y; 
    } 

    public Image getStar() 
    { 
     return stars; 
    } 

    public Image getStar2() 
    { 
     return stars2; 
    } 

    public Image getStar3() 
    { 
     return stars3; 
    } 

} 
public static void main(String[] args) 
{ 
    JFrame frame = new JFrame(); 
    frame.setTitle(" Star Field "); 
    frame.setSize(new Dimension(800,800)); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    MovingPictures panel = new MovingPictures(); 
    frame.add(panel); 
    panel.setBackground(Color.BLACK); 
    frame.setVisible(true); 


} 
} 

ich zusammengestellt habe und lief diese Programm, wenn Sie Hilfe haben, würde es sehr geschätzt werden.

+0

* "aber es funktioniert nicht richtig" * Beschreibe was ** passiert **! Werden die Bilder überhaupt geladen? Bewegen sich die Bilder, aber es gibt "Echos" auf dem Bildschirm? Zerschlagen sie die Fenster und stehlen Sie Ihre Brieftasche? .. –

+0

'stars = new ImageIcon (" star.png "). GetImage();' 1) Anwendungsressourcen werden zum Zeitpunkt der Bereitstellung zu eingebetteten Ressourcen. Daher ist es ratsam, sofort auf sie zuzugreifen, als ob sie gerade wären . Auf ein [tag: embedded-resource] muss nicht die Datei, sondern die URL zugreifen. Siehe [Info. Seite für eingebettete Ressource] (http://stackoverflow.com/tags/embedded-resource/info) zum Erstellen der URL. 2) Sobald Sie eine "URL" auf das Bild zeigen, laden Sie das Bild mit 'ImageIO.read (URL)', das ein 'BufferedImage' zur Verfügung stellt, das nach Bedarf verwendet werden kann, oder eine Menge nützlicher Informationen. –

+0

'frame.setSize (neue Dimension (800,800)); .. frame.setVisible (true); 'sollte' sein .. .. frame.pack(); frame.setVisible (wahr); ' –

Antwort

2

Hinweis, dass eine Änderung:

Stars star; 

An:

Stars star = new Stars(); 

Verhindert das NullPointerException, die von star Ergebnisse verwiesen wird, bevor es instanziiert/erstellt.