我嘗試製作一個翻轉硬幣的程序(首先顯示頭像,後面顯示尾部圖像),我遇到了問題,試圖在處理問題時看到硬幣圖像;只有一個空白屏幕會顯示。我不知道這是來自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);
}
}
我猜想,您的影像未正確加載;仔細檢查你的路徑是否正確。此外,雖然這可能與問題無關,但Coin#draw中有兩個int參數永遠不會被使用。 – Vulcan
如果我可以提出一個更簡單的方法:不是自己做繪圖,而是使用['CardLayout'](http://docs.oracle.com)將每個'ImageIcon'添加到'JLabel'並將其添加到'JPanel'。 COM/JavaSE的/教程/ uiswing /佈局/ card.html)。然後當你擲硬幣時,你只需要做'cardLayout.show(coinContainer,「heads」)'。 –
我應該指定從C:/?開始的路徑嗎?我有我的源文件內的圖像,然後我轉移到Coin項目內部,但在源文件之外。我現在指定/Coin/quarter-coin-head.jpg。 – user1629075