硬币翻转程序

时间:2012-09-08 02:06:24

标签: java coin-flipping

我尝试制作一个翻转硬币的程序(首先显示头部图像,然后显示尾部图像),当我遇到问题时,我遇到了试图查看硬币图像的问题;只显示一个空白屏幕。我不知道这是来自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);
}
}

2 个答案:

答案 0 :(得分: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);
              ^^^^

应该是尾巴......

答案 1 :(得分:0)

小程序的宽度和高度在标签中编码。绘制小程序的代码使用这两种方法在运行时获取这些值。所以现在,不同的标签可以要求同一个小程序绘制不同大小的矩形。源代码不需要针对不同的大小重新编译。