[英]paintComponent Doesn't Draw Sprite On Jpanel
我正在嘗試使用paintComponent方法將一個精靈繪制到Jpanel上,用於我正在創建的游戲。 我正在使用工具包來獲取圖像。 圖片未顯示,我不知道問題出在哪里。 該精靈位於數組中,因為我將對同一函數使用不同的精靈。
這是我的課:
import javax.swing.SwingUtilities;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
public class Game {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
public Game() {
createAndShowGUI();
}
private static void createAndShowGUI() {
System.out.println("Game start: " + SwingUtilities.isEventDispatchThread());
JFrame f = new JFrame("Black Circle");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new MyPanel());
f.pack();
f.setVisible(true);
}
}
class MyPanel extends JPanel {
private int circleX = 500;
private int circleY = 250;
private int circleW = 20;
private int circleH = 20;
private int hiltX1 = 530;
private int hiltY1 = 250;
private int hiltX2 = 536;
private int hiltY2 = 250;
private int bladeX1 = 533;
private int bladeY1 = 255;
private int bladeX2 = 533;
private int bladeY2 = 210;
Image [] weapon = new Image [10];
public int OFFSET = 15;
public MyPanel() {
setFocusable(true);
requestFocusInWindow();
setBorder(BorderFactory.createLineBorder(Color.black));
weapon[0] =
Toolkit.getDefaultToolkit().
getImage("knightsword.jpg");
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_D) {
movecircleRight();
}
else {
e.consume();
}
if (keyCode == KeyEvent.VK_A) {
moveCircleLeft();
}
else {
e.consume();
}
if (keyCode == KeyEvent.VK_W) {
moveCircleUp();
}
else {
e.consume();
}
if (keyCode == KeyEvent.VK_S) {
moveCircleDown();
}
else {
e.consume();
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
int keyCode = e.getKeyCode();
e.consume();
}
});
}
private void movecircleRight() {
circleX += OFFSET;
bladeX1 += OFFSET;
hiltX1 += OFFSET;
bladeX2 += OFFSET;
hiltX2 += OFFSET;
repaint();
}
private void moveCircleLeft() {
circleX -= OFFSET;
bladeX2 -= OFFSET;
hiltX2 -= OFFSET;
bladeX1 -= OFFSET;
hiltX1 -= OFFSET;
repaint();
}
private void moveCircleDown() {
circleY +=OFFSET;
bladeY1 += OFFSET;
hiltY1 += OFFSET;
bladeY2 += OFFSET;
hiltY2 += OFFSET;
repaint();
}
private void moveCircleUp() {
circleY -= OFFSET;
bladeY2 -= OFFSET;
hiltY2 -= OFFSET;
bladeY1 -= OFFSET;
hiltY1 -= OFFSET;
repaint();
}
public Dimension getPreferredSize() {
return new Dimension(1000, 500);
}
//ImageIcon sword = new ImageIcon( ("knightsword.jpg"));
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillOval(circleX, circleY, circleW, circleH);
g.setColor(Color.BLACK);
g.drawOval(circleX, circleY, circleW, circleH);
g.drawLine(hiltX1, hiltY1, hiltX2, hiltY2); // hilt
g.drawLine(bladeX1, bladeY1, bladeX2, bladeY2); // blade
g.drawImage(weapon[0], 200, 250, this);
}
}
你的例子:
URL("http://i.stack.imgur.com/gJmeJ.png")
"knightsword.jpg"
替換為URL("http://i.stack.imgur.com/gJmeJ.png")
(需要對代碼進行一些調整),則可以。 "knightsword.jpg"
則默默失敗。 結論:找不到圖像。
這是我更喜歡使用ImageIO.read(..)
加載圖像的原因之一。 當它失敗時,它會提供許多可愛的堆棧跟蹤來警告我們。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.