2017-05-23 19 views
1

私の仕事は、マウスのクリックをキャプチャした後に2つの画像を切り替えることです。 何とかマウスクリックを検出するために私のコードではできない、スイングで画像が切り替わる

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

---コードMinimal, Complete, and Verifiable exampleまたはShort, Self Contained, Correct Exampleを投稿し、早いほど良いのヘルプについては、マウスイベント

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

      }  
     } 
    } 

答えて

2
  1. をキャッチします。以下の例を参照してください。
  2. 例のイメージを取得する1つの方法は、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); 
    } 
} 
関連する問題