2014-02-08 70 views
-1

我正在做一個遊戲。該項目中有3個不同的文件,其中有一個名爲Dude,Frame和Board的文件。那麼任何人都可以幫助我?代碼: 董事會代碼:
package Ourgame;爲什麼我的JPanel或JFrame不會顯示?

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

public class Board extends JPanel implements ActionListener{ 
Dude p; 
Image img; 
Timer time; 

    public Board() { 
    p = new Dude(); 
    addKeyListener(new AL()); 
    setFocusable(true); 
    ImageIcon i = new ImageIcon("/Users/appleuser/Desktop"); 
    img = i.getImage(); 
    time = new Timer(5, this); 
    time.start(); 
    } 
    public void actionPerformed(ActionEvent e) { 
     p.move(); 
    repaint(); 
    } 

    public void paint(Graphics g) { 
    super.paint(g); 
     Graphics2D g2d = (Graphics2D) g; 

     g2d.drawImage(img, 0, 0, null); 
     g2d.drawImage(p.getImage(), p.getX(), p.getY(), null); 
    } 

    private class AL extends KeyAdapter { 
    public void keyReleased(KeyEvent e) { 
    p.keyReleased(e); 
    } 
    public void keyPressed(KeyEvent e) { 
    p.keyPressed(e); 
    } 
    } 
} 

代碼爲多德:

package Ourgame; 

    import java.awt.Image; 
    import java.awt.event.KeyEvent; 
    import javax.swing.ImageIcon; 
    import javax.swing.JFrame; 

    public class Dude { 
     int x, dx, y; 
     Image still; 

    public Dude() { 
     ImageIcon i = new ImageIcon("/Users/appleuser/Desktop/the man.bmp"); 
     still = i.getImage(); 
     x = 10; 
     y = 172; 
    } 

    public void move() { 
     x = x + dx; 

    } 
    public int getX() { 
     return x; 
    } 
    public int getY() { 
     return y; 
    } 

    public Image getImage() { 
     return still; 
    } 

    public void keyPressed(KeyEvent e) { 
     int key = e.getKeyCode(); 

     if(key == KeyEvent.VK_LEFT); 
     dx = -1; 

     if(key == KeyEvent.VK_RIGHT) 
     dx = 1; 

    } 

public void keyReleased(KeyEvent e) { 
    int key = e.getKeyCode(); 

    if(key == KeyEvent.VK_LEFT); 
    dx = 0; 

    if(key == KeyEvent.VK_RIGHT) 
    dx = 0; 

} 



} 

幀代碼:

package Ourgame; 

import javax.swing.JFrame; 

public class Frame { 

    public static void main(String[] args){ 
    JFrame frame = new JFrame("2D game"); 
    frame.add(new Board()); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(1200, 365); 
    frame.setVisible(true); 
    } 
} 

謝謝:)

+3

你爲什麼要加載桌面上的一個形象? – Obicere

+2

這個終端分號會讓你搞不清楚:'if(key == KeyEvent.VK_LEFT);'。在整個代碼中擺脫這個和類似的分號。始終將**所有**代碼塊放在花括號內,即使是單行塊。 –

+1

另外,調試您的圖像路徑。你最好把它們作爲資源而不是文件。還可以使用調試器來確定問題出在哪裏,併發布有關程序遇到的問題的更詳細說明。 –

回答

0

你可能只是需要調用JFrame.pack()。佈局經理可能沒有設置你的董事會的邊界。嘗試:

frame.getContentPane().add(new Board()); 
frame.pack(); 
frame.setVisible(true); 

如果不那麼我建議你跟隨其他建議在這裏工作:使用調試器和/或檢查你的圖像路徑。 「/ Users/appleuser/Desktop」絕對不是圖像。

+0

*更新*我輸入了正確的圖像路徑,但仍然,我的JPanel或我的JFrame不會。我做了setVisible(true);但我仍然不可見。 – JaVaBoY2002

+0

這不是我說的。 'setVisible()'已經在那裏了。我說過你*可能*需要添加'pack()'。 – nicktalbot

+0

我複製並粘貼,但沒有發生。我嚇壞了!大聲笑! – JaVaBoY2002

0

嘗試調用的EDT你的Swing代碼:

package Ourgame; 

import javax.swing.JFrame; 

public class Frame 
{ 
    public static void main(String[] args) 
    { 
    SwingUtilities.invokeLater(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
     JFrame frame = new JFrame("2D game"); 
     frame.add(new Board()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(1200, 365); 
     frame.setVisible(true); 
     } 
    }); 
    } 
} 
+0

我剛剛做過,但沒有發生任何事情。 – JaVaBoY2002

+0

我建議你看看這裏:http://docs.oracle.com/javase/tutorial/uiswing/components/frame.html並獲得FrameDemo.java的工作,然後從那裏工作。 – nicktalbot

相關問題