Amit
Amit

Reputation: 495

Image switching in swing

My task is to switch two images after capturing mouse click, means when any user clicks on two images both should switch. but somehow in my code not able to detect the mouse click,

imageAnimal = createImageIcon("Lion", "Lion"); 
    Image scale = imageAnimal.getImage().getScaledInstance(200,200,Image.SCALE_SMOOTH); 
    imageAnimal = new ImageIcon(scale); 
    image1Label = new JLabel("", imageAnimal, JLabel.CENTER); 

  imageMot = createImageIcon("car", "car"); 
    Image scale = imageMot.getImage().getScaledInstance(200,200,Image.SCALE_SMOOTH); 
    imageMot = new ImageIcon(scale); 
    image1Label = new JLabel("", imageMot, JLabel.CENTER); 

---Code to catch mouse event

public void switch() { 
        abstract class MouseListener implements ActionListener {
        public void actionPerformed(MouseEvent event){
            boolean clicked = false; 
            JPanel imageClicked1; 
            JPanel imageClicked2 = (JPanel) event.getSource(); 
            int numClicks = 0; 
                for(int i = 0; i < temp.size(); i++) 
                { 
                if(clicked) 
                { 
                    numClicks++; 
                    imageClicked1 = (JPanel) event.getSource(); 
                        if(numClicks == 2) 
                        { 
                           switchImages(imageClicked1, imageClicked2);   
                        }                       
                } 
               MAINpanel.repaint(); 
               MAINpanel.revalidate();                 
            } 
         } 

            public void switchImages(JPanel img1, JPanel img2) 
            { 
                //ArrayList<JPanel>sorted = new ArrayList<JPanel>(); 
                JPanel t; 
                JPanel posValue, nextValue; 
                for(int i = 0; i < temp.size(); i++) 
                { 
                    for(int k = 1; k < temp.size(); k++) 
                    { 
                    if(temp.get(i) == img1 && temp.get(k) == img2) 
                    { 
                        posValue = temp.get(k); 
                        nextValue = temp.get(i); 
                        t = temp.get(k); 
                        posValue = temp.get(i); 
                        nextValue = t; 
                    }                       
                    } 
                } 
                for(int i = 0; i < 5; i++) 
          { 
                mainPanel.add(temp.get(i), BorderLayout.CENTER); 
          } 

            }     
        } 
    }

Upvotes: 1

Views: 91

Answers (1)

Andrew Thompson
Andrew Thompson

Reputation: 168815

  1. For better help sooner, post a Minimal, Complete, and Verifiable example or Short, Self Contained, Correct Example. See example below.
  2. One way to get image(s) for an example is to hot link to images seen in this Q&A. See example below.
  3. It seems to make no sense to declare and add the mouse listener within the switch method. But maybe an MCVE / SSCCE would make it clear.
  4. MAINpanel.repaint(); Ouch.. Use labels to display the images! On switch, swap their ImageIcon instances. See example below.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.net.*;

public class ImageSwitch {

    private JComponent ui = null;
    JLabel label1 = new JLabel();
    JLabel label2 = new JLabel();
    ImageIcon imageIconA;
    ImageIcon imageIconB;

    ImageSwitch() {
        try {
            initUI();
        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        }
    }

    private void switchImages() {
        if (label1.getIcon().equals(imageIconA)) {
            label1.setIcon(imageIconB);
            label2.setIcon(imageIconA);
        } else {
            label1.setIcon(imageIconA);
            label2.setIcon(imageIconB);
        }
    }

    public void initUI() throws MalformedURLException {
        if (ui!=null) return;

        ui = new JPanel(new GridLayout(0,1,2,2));
        ui.setBorder(new EmptyBorder(4,4,4,4));

        imageIconA = new ImageIcon(new URL("https://i.sstatic.net/OVOg3.jpg"));
        imageIconB = new ImageIcon(new URL("https://i.sstatic.net/lxthA.jpg"));
        label1.setIcon(imageIconA);
        label2.setIcon(imageIconB);
        ui.add(label1);
        ui.add(label2);

        MouseListener mouseListener = new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                switchImages();
            }
        };
        label1.addMouseListener(mouseListener);
        label2.addMouseListener(mouseListener);
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception useDefault) {
                }
                ImageSwitch o = new ImageSwitch();

                JFrame f = new JFrame(o.getClass().getSimpleName());
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack();
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

Upvotes: 2

Related Questions