Java - Create Image Zooming Project In Netbeans

How to Create Image Zoom-In And Zoom-Out in Java NetBeans

Create Image Zooming Project In Java Netbeans


In this Java Long Tutorial we will see how How To Create a simple image zooming application using Java Swing.

What We Are Gonna Use In This Project:

- Java Programming Language.
- NetBeans Editor.

What We Will Do In This Project:

- Create a Form with buttons for opening an image, zooming in, zooming out, and resetting the zoom level.




Project Source Code:


package imagezoomapp;

import com.formdev.flatlaf.FlatLightLaf;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

/**
 *
 * @author 1BestCsharp
 */

// Download flatLaf lib => https://search.maven.org/artifact/com.formdev/flatlaf/3.1.1/jar?eh=

public class ImageZoomApp extends JFrame {

        private JLabel imageLabel;
        private JButton openButton;
        private JButton zoomInButton;
        private JButton zoomOutButton;
        private JButton resetButton;
        private JScrollPane scrollPane;
        private ImageIcon originalImageIcon; // Stores the original image
        private ImageIcon scaledImageIcon;   // Stores the scaled image
        private double scaleFactor = 1.0;    // Stores the current zoom scale factor
        
        
        public ImageZoomApp()
        {
            setTitle("Image Zoom");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(800,600);
            setLocationRelativeTo(null);
            setLayout(new BorderLayout());
            
            try
            {
              UIManager.setLookAndFeel(new FlatLightLaf());
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
            
            initialize(); // initialize the user interface
        }
        
        private void initialize()
        {
            imageLabel = new JLabel();
            scrollPane = new JScrollPane(imageLabel);
            
            UIManager.put("Button.background", new Color(52,152,219));
            UIManager.put("Button.foreground", Color.white);
            
            openButton = new JButton("Open Image");
            openButton.setFont(new Font("Arial", Font.BOLD, 14));
            openButton.addActionListener(new openButtonListener());
            
            
            zoomInButton = new JButton("zoom-In");
            zoomInButton.setFont(new Font("Arial", Font.BOLD, 14));
            zoomInButton.addActionListener(new zoomInButtonListener());
            
            
            zoomOutButton = new JButton("zoom-Out");
            zoomOutButton.setFont(new Font("Arial", Font.BOLD, 14));
            zoomOutButton.addActionListener(new zoomOutButtonListener());
            
            
            resetButton = new JButton("Reset");
            resetButton.setFont(new Font("Arial", Font.BOLD, 14));
            resetButton.addActionListener(new resetButtonListener());
            
            JPanel buttonPanel = new JPanel(new FlowLayout());
            buttonPanel.setBackground(Color.white);
            buttonPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
            buttonPanel.add(openButton);
            buttonPanel.add(zoomInButton);
            buttonPanel.add(zoomOutButton);
            buttonPanel.add(resetButton);
            
            add(scrollPane, BorderLayout.CENTER);
            add(buttonPanel, BorderLayout.SOUTH);
            
            
        }

        // Create a Listener for the "Open Image" button
        private class openButtonListener implements ActionListener{

            @Override
            public void actionPerformed(ActionEvent e) {
            
                JFileChooser fileChooser = new JFileChooser();
                int result = fileChooser.showOpenDialog(ImageZoomApp.this);
                if(result == JFileChooser.APPROVE_OPTION)
                {
                    try
                    {
                        File selectedFile = fileChooser.getSelectedFile();
                        originalImageIcon = new ImageIcon(ImageIO.read(selectedFile));
                        displayImage();
                        
                    }
                    catch(Exception ex)
                    {
                        JOptionPane.showMessageDialog(ImageZoomApp.this, "Error Opening the selected image", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
            
            }
            
        }
        
        // Create a Listener for the "Zoom In" button
        private class zoomInButtonListener implements ActionListener{

            @Override
            public void actionPerformed(ActionEvent e) {
            
                try
                {
                    scaleFactor *= 1.2;
                    displayImage();
                }
                catch(OutOfMemoryError error)
                {
                    JOptionPane.showMessageDialog(ImageZoomApp.this, "Maximum zoom level reached.", "Zoom Limit", JOptionPane.ERROR_MESSAGE); 
                }
              
            }
            
        }
        
        // Create a Listener for the "Zoom Out" button
        private class zoomOutButtonListener implements ActionListener{

            @Override
            public void actionPerformed(ActionEvent e) {
            
                try
                {
                    scaleFactor /= 1.2;
                    displayImage();
                }
                catch(Exception ex){ 
                    JOptionPane.showMessageDialog(ImageZoomApp.this, "No More Zoom Out", "Error", JOptionPane.ERROR_MESSAGE); 
                }
                
            
            }
            
        }
        
        
        // Create a Listener for the "Reset" button
        private class resetButtonListener implements ActionListener{

            @Override
            public void actionPerformed(ActionEvent e) {
            
                scaleFactor = 1.0;
                displayImage();
            
            }
            
        }
        
        
    
    // Create a Function to Update the displayed image based on the current scale factor
        private void displayImage()
        {
            if(originalImageIcon != null)
            {
                int newWidth = (int) (originalImageIcon.getIconWidth()*scaleFactor);
                int newHeight = (int) (originalImageIcon.getIconHeight()*scaleFactor);
                
                scaledImageIcon = new ImageIcon(originalImageIcon.getImage().getScaledInstance(newWidth, newHeight, Image.SCALE_DEFAULT));
                
                imageLabel.setIcon(scaledImageIcon);
                scrollPane.setViewportView(imageLabel);
            }   
        }
        
        
    // the main method
    public static void main(String[] args) {
        
       SwingUtilities.invokeLater(()->{
       
           ImageZoomApp app = new ImageZoomApp();
           app.setVisible(true);
           
       });
        
    }

}

The Final Result:



java image zoom-in

java image zoom-out



download the source code




Share this

Related Posts

Previous
Next Post »