【问题标题】:Image switching in swing摆动中的图像切换
【发布时间】:2017-05-24 00:01:58
【问题描述】:

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

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

            }     
        } 
    }

【问题讨论】:

    标签: java swing mouselistener


    【解决方案1】:
    1. 如需尽快获得更好的帮助,请发布Minimal, Complete, and Verifiable exampleShort, Self Contained, Correct Example。请参见下面的示例。
    2. 例如,获取图像的一种方法是热链接到在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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      相关资源
      最近更新 更多