2012-09-08 110 views
4

我嘗試製作一個翻轉硬幣的程序(首先顯示頭像,後面顯示尾部圖像),我遇到了問題,試圖在處理問題時看到硬幣圖像;只有一個空白屏幕會顯示。我不知道這是來自JPG圖片的不正確保存方法還是來自代碼中的錯誤。我再次遇到了一個錯誤,然後再次編寫了頭部圖像顯示和尾部圖像未顯示的程序。硬幣翻轉程序

CoinTest.java運行硬幣轉輪,Coin.java是該程序的類。

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class CoinTest extends JPanel 
implements ActionListener 
{ 
    private Coin coin; 

    public CoinTest() 
{ 
Image heads = (new ImageIcon("quarter-coin-head.jpg")).getImage(); 
Image tails = (new ImageIcon("Indiana-quarter.jpg")).getImage(); 
coin = new Coin(heads, tails); 

Timer clock = new Timer(2000, this); 
clock.start(); 
} 

public void paintComponent(Graphics g) 
{ 
super.paintComponent(g); 

int x = getWidth()/2; 
int y = getHeight()/2; 
coin.draw(g, x, y); 
} 

public void actionPerformed(ActionEvent e) 
    { 
    coin.flip(); 
    repaint(); 
    } 

public static void main(String[] args) 
{ 
JFrame w = new JFrame("Flipping coin"); 
w.setSize(300, 300); 
w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    CoinTest panel = new CoinTest(); 
    panel.setBackground(Color.WHITE); 
    Container c = w.getContentPane(); 
    c.add(panel); 

    w.setVisible(true); 
    } 
} 

現在是實際的硬幣類。

import java.awt.Image; 
import java.awt.Graphics; 

public class Coin 
{ 
private Image heads; 
private Image tails; 
private int side = 1; 

public Coin(Image h, Image t) 
{ 
    heads = h; 
    tails = t; 
} 

//flips the coin 
public void flip() 
{ 
    if (side == 1) 
     side = 0; 
    else 
     side = 1; 
} 

//draws the appropriate side of the coin - centered in the JFrame 
public void draw(Graphics g, int x, int y) 
{ 
    if (side == 1) 
    g.drawImage(heads, heads.getWidth(null)/3, heads.getHeight(null)/3, null); 
    else 
    g.drawImage(heads, tails.getWidth(null)/3, tails.getHeight(null)/3, null); 
} 
} 
+0

我猜想,您的影像未正確加載;仔細檢查你的路徑是否正確。此外,雖然這可能與問題無關,但Coin#draw中有兩個int參數永遠不會被使用。 – Vulcan

+0

如果我可以提出一個更簡單的方法:不是自己做繪圖,而是使用['CardLayout'](http://docs.oracle.com)將每個'ImageIcon'添加到'JLabel'並將其添加到'JPanel'。 COM/JavaSE的/教程/ uiswing /佈局/ card.html)。然後當你擲硬幣時,你只需要做'cardLayout.show(coinContainer,「heads」)'。 –

+0

我應該指定從C:/?開始的路徑嗎?我有我的源文件內的圖像,然後我轉移到Coin項目內部,但在源文件之外。我現在指定/Coin/quarter-coin-head.jpg。 – user1629075

回答

2

首先,確保兩張圖像都在正確的位置加載。

其次,你有一個錯字這裏:

if (side == 1) 
    g.drawImage(heads, heads.getWidth(null)/3, heads.getHeight(null)/3, null); 
else 
    g.drawImage(heads, tails.getWidth(null)/3, tails.getHeight(null)/3, null); 
       ^^^^ 

應該是尾巴......

+0

啊,謝謝你,一定是爲什麼當我最初運行這個程序時只有人頭顯示。但是我把程序轉移到另一臺計算機上,現在我遇到了顯示圖像的問題。 – user1629075

+0

已修復。上面的解釋說明。 – user1629075