【问题标题】:How to make an image blink in a random position?如何使图像在随机位置闪烁?
【发布时间】:2011-09-19 01:47:40
【问题描述】:

我在JApplet 中有一张图片,我希望它出现在随机位置。它会在 1 秒后消失,然后在另一个随机位置再次出现。

如何实现“在随机位置闪烁”?

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.net.URL;

public class Random extends JApplet
{

 Image ball;

  public void init()
  {
    try
    {
        URL pic = new URL(getDocumentBase(), "ball.gif");
        ball = ImageIO.read(pic);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
   }

    public void paint(Graphics g)
    {
       if (ball != null)
      {
        g.drawImage(ball,50,50,50,50,this);
      }
    }
}

【问题讨论】:

    标签: java image applet graphics2d japplet


    【解决方案1】:

    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import javax.swing.*;
    import java.util.Random;
    
    class ImageBlinker extends JComponent {
    
        BufferedImage image;
        boolean showImage;
        int x = -1;
        int y = -1;
        Random r;
    
        ImageBlinker() {
            // put your image reading code here..
            image = new BufferedImage(32,32,BufferedImage.TYPE_INT_ARGB);
            Graphics g = image.createGraphics();
            g.setColor(Color.ORANGE);
            g.fillOval(0,0,32,32);
            // END - image read
    
            r = new Random();
            ActionListener listener = new ActionListener(){
                public void actionPerformed(ActionEvent ae) {
                    if (image!=null) {
                        if (!showImage) {
                            int w = image.getWidth();
                            int h = image.getHeight();
                            int rx = getWidth()-w;
                            int ry = getHeight()-h;
                            if (rx>-1 && ry>-1) {
                                x = r.nextInt(rx);
                                y = r.nextInt(ry);
                            }
                        }
                        showImage = !showImage;
                        repaint();
                    }
                }
            };
            Timer timer = new Timer(600,listener);
            timer.start();
    
            setPreferredSize(new Dimension(150,100));
            JOptionPane.showMessageDialog(null, this);
            timer.stop();
        }
    
        public void paintComponent(Graphics g) {
            g.setColor(Color.BLUE);
            g.fillRect(0,0,getWidth(),getHeight());
            if (showImage && image!=null) {
                g.drawImage(image,x,y,this);
            }
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new ImageBlinker();
                }
            });
        }
    }
    

    【讨论】:

    • 漂亮的眨眼,我真的很感激。如果我在椭圆内放一个“image.gif”怎么办?有可能吗?
    • 如果我在椭圆内放一个“image.gif”会怎样? 当你尝试时发生了什么? 有可能吗?这对我或其他任何人来说都很容易,但我不能说是否适合你。
    【解决方案2】:

    为了我的钱,我将 Image 放在 ImageIcon 中,将 ImageIcon 放在 JLabel 中,然后使用 Swing Timer 和 Random 对象随机移动 JLabel。您必须将其移动到布局已设置为 null 的容器中(contentPane 会这样做),并且您必须将 JLabel 的大小指定为其 preferredSize 才能使其正常工作。

    【讨论】:

    • 但是当我使用ImageIcon时图像不会出现,它只有在设置为Image时才会出现。我使用 URL 使其显示但没有 JLabel。
    • 那么请告诉我们你在做什么,因为它对我来说很好。
    • 我已经编辑了我的问题并在上面添加了我的代码。他们的代码只是为了在 JApplet 中显示图像。
    • 您永远不应该使用绘画直接在 JApplet 中绘图。相反,您应该绘制 JComponent(例如 JPanel)并将其添加到小程序中,或者将其设置为小程序的 contentPane,或者按照我的建议在 JLabel 中使用 ImageIcon。你能告诉我们你是如何尝试使用我的推荐的吗?你说的那一点对你不起作用?
    • @Mikel:您必须发布所有代码作为对原始问题的编辑。我们无法读取 cmets 中未格式化的代码。此外,使用 ImageIO.read 方法获取您的图像,该方法将 InputStream 作为参数,然后使用 Class#getResourceAsStream(...) 方法获取您的 InputStream。
    猜你喜欢
    • 2023-04-02
    • 2012-08-20
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 2012-08-22
    相关资源
    最近更新 更多