swing 中的图像切换

Image switching in swing

我的任务是在捕获鼠标点击后切换两个图像,这意味着当任何用户点击两个图像时都应该切换。 但不知何故在我的代码中无法检测到鼠标点击,

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); 

---捕捉鼠标事件的代码

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); 
          } 

            }     
        } 
    }
  1. 为了尽快获得更好的帮助,post Minimal, Complete, and Verifiable example or Short, Self Contained, Correct Example。请参阅下面的示例。
  2. 获取示例图像的一种方法是热 link 到 this Q&A 中看到的图像。请参阅下面的示例。
  3. switch方法中声明和添加鼠标监听器似乎没有意义。但也许 MCVE / SSCCE 会说清楚。
  4. MAINpanel.repaint();哎哟.. 用标签显示图片!在交换机上,交换它们的 ImageIcon 个实例。 请参见下面的示例。

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.stack.imgur.com/OVOg3.jpg"));
        imageIconB = new ImageIcon(new URL("https://i.stack.imgur.com/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);
    }
}