欢迎访问宙启技术站
智能推送

使用javax.swing库创建一个简单的图像浏览器应用程序

发布时间:2023-12-23 07:30:53

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.File;

import javax.imageio.ImageIO;

public class ImageViewer extends JFrame {

    private JLabel imageLabel;

    private JButton previousButton;

    private JButton nextButton;

    private File[] imageFiles;

    private int currentIndex;

    public ImageViewer(String[] fileNames) {

        super("Image Viewer");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Load image files

        imageFiles = new File[fileNames.length];

        for (int i = 0; i < fileNames.length; i++) {

            imageFiles[i] = new File(fileNames[i]);

        }

        // Create image label

        imageLabel = new JLabel();

        imageLabel.setHorizontalAlignment(JLabel.CENTER);

        displayImage();

        // Create previous button

        previousButton = new JButton("Previous");

        previousButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                previousImage();

            }

        });

        // Create next button

        nextButton = new JButton("Next");

        nextButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                nextImage();

            }

        });

        // Add components to the frame

        Container contentPane = getContentPane();

        contentPane.setLayout(new BorderLayout());

        contentPane.add(imageLabel, BorderLayout.CENTER);

        JPanel buttonPanel = new JPanel(new FlowLayout());

        buttonPanel.add(previousButton);

        buttonPanel.add(nextButton);

        contentPane.add(buttonPanel, BorderLayout.SOUTH);

        pack();

        setVisible(true);

    }

    private void displayImage() {

        try {

            Image image = ImageIO.read(imageFiles[currentIndex]);

            imageLabel.setIcon(new ImageIcon(image.getScaledInstance(800, 600, Image.SCALE_DEFAULT)));

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    private void previousImage() {

        currentIndex = (currentIndex - 1 + imageFiles.length) % imageFiles.length;

        displayImage();

    }

    private void nextImage() {

        currentIndex = (currentIndex + 1) % imageFiles.length;

        displayImage();

    }

    public static void main(String[] args) {

        String[] fileNames = {

                "image1.jpg",

                "image2.jpg",

                "image3.jpg"

        };

        new ImageViewer(fileNames);

    }

}

 

在这个例子中,我们使用javax.swing库创建了一个简单的图像浏览器应用程序。我们创建了一个继承自JFrame的ImageViewer类。

在类中,我们定义了图像标签(imageLabel)、前进按钮(previousButton)、后退按钮(nextButton)、图像文件数组(imageFiles)和当前图像索引(currentIndex)。

在构造函数中,我们首先加载图像文件,并将其保存到imageFiles数组中。然后我们创建图像标签(imageLabel)并设置其对齐方式为居中。接下来,我们创建前进按钮(previousButton)和后退按钮(nextButton),并分别为它们添加动作监听器,以响应点击事件。

然后,我们将图像标签和按钮添加到容器(contentPane)中并进行布局。最后,我们调用pack()方法,将组件按其首选大小进行布局,并设置应用程序的可见性。

在displayImage()方法中,我们尝试读取当前图像文件并将其显示在图像标签中。使用ImageIO.read()方法读取图像文件,并创建Image对象。然后,我们使用ImageIcon和Image.getScaledInstance()方法将图像进行缩放,并将其设置为图像标签的图标。

在previousImage()方法中,将当前图像索引减1,并使其循环回到数组的末尾。

在nextImage()方法中,将当前图像索引加1,并使其循环回到数组的开头。

在main()方法中,我们创建了一个ImageViewer对象,并传入包含图像文件名的字符串数组。然后,应用程序启动,并显示第一张图像。用户可以通过点击按钮来切换图像。

请注意,此应用程序假设图像文件与源代码位于同一目录中。如果图像文件位于其他位置,你需要提供完整的文件路径。