爲什麼不創建硬幣的ArrayList(類名應爲大寫)或ArrayList中。然後,如果您需要在顯示屏上添加或刪除硬幣,您可以將其從ArrayList中添加或刪除。然後,paintComponent方法可以循環遍歷循環中的每個硬幣的for循環中的數組列表。
此外,顯示硬幣的最簡單方法是將其放入ImageIcon中,然後使用它來設置JLabel的圖標。
例如與圖像縮放,使硬幣更小,並與圖像過濾器,以改變白色背景透明:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.awt.image.ImageProducer;
import java.awt.image.RGBImageFilter;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.swing.*;
public class Coins extends JPanel implements ActionListener {
private static final String COIN_URL_PATH = "http://cdn.dailyclipart.net/wp-content/uploads/medium/clipart0273.jpg";
private static final String COIN_URL_PATH2 = "http://content.scholastic.com/content/media/products/71/0439510171_rgb15_xlg.jpg";
private static final String COIN_URL_PATH3 = "http://uscoinstoday.com/images/e/130580876887_0.jpg";
private static final int PAN_WIDTH = 900;
private static final int PAN_HT = 700;
protected static final int TRANSPARENT = new Color(255, 255, 255, 0)
.getRGB();
private Timer t;
private BufferedImage coinImage;
private ImageIcon coinIcon;
private Random random = new Random();
public Coins() {
setLayout(null);
try {
coinImage = ImageIO.read(new URL(COIN_URL_PATH));
double scaleFactor = 0.35;
BufferedImage destImg = new BufferedImage((int)(coinImage.getWidth() * scaleFactor),
(int) (coinImage.getHeight() * scaleFactor), BufferedImage.TYPE_INT_ARGB);
AffineTransform at = AffineTransform.getScaleInstance(scaleFactor, scaleFactor);
AffineTransformOp ato = new AffineTransformOp(at,
AffineTransformOp.TYPE_BICUBIC);
ato.filter(coinImage, destImg);
ImageFilter whiteToTranspFilter = new RGBImageFilter() {
@Override
public int filterRGB(int x, int y, int rgb) {
Color color = new Color(rgb);
int colorSum = color.getBlue() + color.getRed() + color.getGreen();
int maxColorSum = 600;
if (colorSum > maxColorSum) {
return TRANSPARENT;
}
return rgb;
}
};
ImageProducer ip = new FilteredImageSource(destImg.getSource(), whiteToTranspFilter);
Image destImg2 = Toolkit.getDefaultToolkit().createImage(ip);
coinIcon = new ImageIcon(destImg2);
t = new Timer(1000, this);
t.start();
} catch (MalformedURLException e) {
e.printStackTrace();
System.exit(-1);
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(PAN_WIDTH, PAN_HT);
}
public void actionPerformed(ActionEvent e) {
System.out.println("1 Second");
Coin c = new Coin(random.nextInt(640), random.nextInt(480), coinIcon);
add(c.getCoinLabel());
revalidate();
repaint();
}
public static void main(String[] args) {
Coins coins = new Coins();
JFrame frame = new JFrame("Coins");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(coins);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
class Coin {
JLabel coinLabel = new JLabel();
public Coin(int x1, int y1, ImageIcon coinIcon) {
coinLabel.setIcon(coinIcon);
coinLabel.setLocation(x1, y1);
coinLabel.setSize(coinLabel.getPreferredSize());
}
public JLabel getCoinLabel() {
return coinLabel;
}
}
難道你只是把你現在的代碼在'for'循環? – Andy
nitpick:不要爲x和y創建一個Random對象,也不要在actionPerformed中不必要地重新創建。爲該類創建一個Random對象,並在需要時爲x和y使用它。 –