2016-06-01 147 views
1

我正在創建一個簡單的GUI,它可以在屏幕上移動3個PNG,但不能正常工作。在屏幕上移動3個PNG的簡單GUI - 無法正常工作

這裏是我有我新的GUI和搖擺所以可能會有一些非常簡單平常的錯誤代碼,我爲他們在這裏你去道歉:

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); 


} 
} 

我編譯和運行這個程序如果你有任何幫助,將不勝感激。

+0

*「但它工作不正常」*請描述**發生了什麼!它是否加載圖像?圖像是否移動,但屏幕上有「回聲」?他們是否粉碎窗戶並偷走你的錢包? .. –

+0

'stars = new ImageIcon(「star.png」)。getImage();'1)應用程序資源在部署時將成爲嵌入式資源,所以開始訪問它們是明智的,就像現在一樣。 [tag:embedded-resource]必須通過URL而不是文件訪問。請參閱[信息。頁面爲嵌入式資源](http://stackoverflow.com/tags/embedded-resource/info)如何形成的URL。 2)一旦你有一個指向圖像的URL,使用'ImageIO.read(URL)'加載圖像,該圖像將提供一個可以根據需要使用的'BufferedImage',否則就會提供大量有用的信息。 –

+0

'frame.setSize(new Dimension(800,800)); .. frame.setVisible(true);'應該是'.. frame.pack(); frame.setVisible(true);' –

回答

2

請注意,更改:

Stars star; 

要:

Stars star = new Stars(); 

防止從star產生的NullPointerException被實例化之前被引用/創建。