2014-01-24 66 views
0

我已經嘗試了一切以獲得背景圖像,它不是隻是一個灰色的背景,或顯示沒有播放器的圖像,或沒有圖像的播放器。出於某種原因,我無法畫出背景?任何幫助將不勝感激!謝謝!JFrame背景圖片不會工作

package main; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.awt.geom.Ellipse2D; 

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

public class grow extends JPanel implements ActionListener, KeyListener{ 
double x = 0, y = 0, velx = 0, vely = 0; 
Timer t = new Timer(5, this); 

public grow(){ 
t.start(); 
addKeyListener(this); 
setFocusable(true); 
setFocusTraversalKeysEnabled(false); 
} 

public void paintComponent(Graphics g){ 
super.paintComponent(g); 
Graphics2D g2d = (Graphics2D) g; 
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,  RenderingHints.VALUE_RENDER_QUALITY); 
g2d.setPaint(Color.blue); 
g2d.fill(new Ellipse2D.Double(x, y, 70, 70)); 


} 

public void actionPerformed(ActionEvent e) { 
repaint(); 
x += velx; 
y += vely; 

} 

public void up(){ 
vely = -2; 
velx = 0; 
} 
public void down(){ 
vely = 2; 
velx = 0; 
} 
public void left(){ 
vely = 0; 
velx = -2; 
} 

public void right(){ 
vely = 0; 
velx = 2; 
} 




public void keyPressed(KeyEvent e) { 
int code = e.getKeyCode(); 
if(code == KeyEvent.VK_UP){ 
    up(); 
} 
if(code == KeyEvent.VK_DOWN){ 
    down(); 
} 

if(code == KeyEvent.VK_RIGHT){ 
    right(); 
} 

if(code == KeyEvent.VK_LEFT){ 
    left(); 
} 

} 
public void stop(){ 
velx = 0; 
vely = 0; 
} 
public void keyReleased(KeyEvent e) { 
int code = e.getKeyCode(); 
if(code == KeyEvent.VK_UP){ 
    stop(); 
} 
if(code == KeyEvent.VK_DOWN){ 
    stop(); 
} 

if(code == KeyEvent.VK_RIGHT){ 
    stop(); 
} 

if(code == KeyEvent.VK_LEFT){ 
    stop(); 
    } 

} 

public void keyTyped(KeyEvent e) { 

} 

} 

,這裏是我的類,它顯示的JFrame:不是一個KeyListener

package main; 

import java.awt.Color; 
import java.awt.Component; 

import javax.swing.JFrame; 

public class playerandframe{ 

static grow g = new grow(); 
public static void main(String args[]){ 
    JFrame j = new JFrame("|The Wizards Of Lleon|"); 
    j.add(g); 
    j.setSize(600,600); 
    j.setVisible(true); 
    j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

} 
+0

我看到的是一個'g2d.fill',這我假設的背景是首選大小。我沒有看到有人試圖畫出兩件物品。那麼你試圖繪製的背景和圖像在哪裏? –

回答

1
  1. 使用key bindings,你可以用KeyListener運行成爲關注的焦點問題。鍵綁定更適合Swing應用程序的關鍵事件。你可以看到一個例子here
  2. 只要在背景中的圖像在相同的paintComponent方法。我目前只看到其中一件事情正在繪製中。
  3. 使用正確的java命名約定。類名應該用大寫字母。
  4. @OverrideJPanel類(grow)代替設置框的大小的getPreferredSize(),並使用frame.pack(),而不是frame.setSize()。包裝框會尊重你給面板

    @Override 
    public Dimension getPreferredSize() { 
        return new Dimension(600, 600); 
    } 
    
    .... and 
    frame.pack(); // in the main