【问题标题】:How to change automatically a Jlabel如何自动更改 Jlabel
【发布时间】:2014-03-24 16:40:26
【问题描述】:

您好,我正在尝试创建一个 Java 桌面应用程序,我可以在其中每 5 秒自动移动一次图像。我能够做到这一点。问题是我想使用自己的图像,并且想将所有图像放在一个 Jlabel 上。我做了以下代码

我怎样才能得到这个?

private static class ImagePanel extends JPanel {

        URL[] urls;
        ImageIcon[] image;
        BufferedImage[] images;
        Random rand = new Random();
        JLabel imagelabel;

        public ImagePanel() {
            urls = new URL[4];

            try {


               urls[0] = new URL("http://i.stack.imgur.com/NCsHu.png");
               urls[1] = new URL("http://i.stack.imgur.com/UvHN4.png");
               urls[2] = new URL("http://i.stack.imgur.com/s89ON.png");
               urls[3] = new URL("http://i.stack.imgur.com/QEK2o.png");


               images = new BufferedImage[5];
               images[0] = ImageIO.read(urls[0]);
               images[1] = ImageIO.read(urls[1]);
               images[2] = ImageIO.read(urls[2]);
               images[3] = ImageIO.read(urls[3]);

            } catch (MalformedURLException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }

            setBackground(Color.BLACK);

            Timer timer = new Timer(5000, new ActionListener(){
                @Override
                public void actionPerformed(ActionEvent e) {
                    repaint();
                }
            });
            timer.start();
        }

        private int random() {
            int index = rand.nextInt(4);
            return index;
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            BufferedImage img = images[random()];
            g.drawImage(img, 0, 0, 400, 400, 0, 0,
                    img.getWidth(), img.getHeight(), this);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(400, 400);
        }
    }
}

提前致谢

【问题讨论】:

    标签: java swing timer


    【解决方案1】:

    " 但问题是我想使用我自己的图像,我想将所有图像放在单个 jlabel 上。"

    该程序似乎正在使用 Web URL。所以我猜你的问题只是如何使用你自己的文件图像。

    您应该做的是将图像放在项目中的一个包中,例如

    ProjectRoot
             src
                resources
                       image1.png
                       image2.png
    

    然后你可以用类似这样的东西替换URL

    //urls[0] = new URL("http://i.stack.imgur.com/NCsHu.png");
    urls[0] = ImagePanel.class.getResource("/resources/image1.png");
    urls[1] = ImagePanel.class.getResource("/resources/image2.png");
    

    embedded-resource wiki 信息中查看更多信息,以了解有关如何使用嵌入式资源的更多信息。


    这段代码看起来familar ;-)


    编辑

    根据您的问题标题和有关JLabel 的问题,该代码实际上并未使用JLabel。它绘制图像。如果您确实想改用JLabel,那么您可以做的就是使用imageLabel.setIcon(images[randon()]) 来更改标签图标。你可以在Timer监听器中做到这一点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-24
      • 1970-01-01
      • 1970-01-01
      • 2019-09-05
      • 2014-08-25
      • 2023-03-28
      • 1970-01-01
      • 2012-02-21
      相关资源
      最近更新 更多