我尝试制作一个翻转硬币的程序(首先显示头部图像,然后显示尾部图像),当我遇到问题时,我遇到了试图查看硬币图像的问题;只显示一个空白屏幕。我不知道这是来自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 :(得分: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)
小程序的宽度和高度在标签中编码。绘制小程序的代码使用这两种方法在运行时获取这些值。所以现在,不同的标签可以要求同一个小程序绘制不同大小的矩形。源代码不需要针对不同的大小重新编译。