4

我尝试制作一个抛硬币的程序(先显示正面图像,然后显示反面图像),但在运行问题时尝试查看硬币图像时遇到了问题;只会显示一个空白屏幕。我不知道这是由于 jpg 图像的不正确保存方法还是代码中的错误。在再次编码显示头部图像而未显示尾部图像的程序之前,我也遇到了一个错误。

CoinTest.java 运行 coin runner,而 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);
  }
}

现在是实际的 Coin 类。

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);
}
}
4

2 回答 2

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);
              ^^^^

应该是尾巴...

于 2012-09-08T02:24:14.597 回答
0

The width and height of the applet are coded in the tag. The code that draws the applet uses the two methods to get these values at run time. So now, different tags can ask for the same applet to paint different sized rectangles. The source code does not need to be recompiled for different sizes.

于 2021-04-21T08:40:41.040 回答