2015-08-20 10 views
7

मेरे पास ग्रिड लेआउट और दो जेएलएबल छवियों वाला कोड है। प्रत्येक बार जब मैं प्रत्येक छवि पर रोल करता हूं तो मुझे कुछ पाठ दिखाई नहीं देता है। मैं इस बात पर परिचित हूं कि यह छवि कैसे करें जब छवि जेएलएबल नहीं है, लेकिन पूरे वेब पर खोज की है ताकि यह पता चल सके कि यह एक अनाम नाम जेलाबेल है। संदेशों से अधिक दो छवियों मेरे पास करने के लिए wan't, अलग रोल के साथ कर रहे हैं:जेएलएबल पर रोलओवर जिसमें ग्रिड लेआउट के भीतर छवि शामिल है?

ImageIcon(getClass().getResource("giraffe.png")); 
      Icon windows = new ImageIcon(getClass().getResource("windows.png")); 

यहाँ मेरी कोड है:

public class giraffe implements ActionListener{ 


     public void actionPerformed(ActionEvent event) { 


      JOptionPane.showMessageDialog(null, 
        "Press ok, and see the amazing giraffe outside a window!"); 

      JDialog giraffewindow = new JDialog(); 
      Icon giraffe = new ImageIcon(getClass().getResource("giraffe.png")); 
      Icon windows = new ImageIcon(getClass().getResource("windows.png")); 

      giraffewindow.setLayout(new GridLayout(1, 2, 0, 0)); 
      giraffewindow.add(new JLabel (windows)); 
      giraffewindow.add(new JLabel (giraffe)); 


      giraffewindow.pack(); 
      giraffewindow.setTitle("GIRAFFE!"); 
      giraffewindow.setVisible(true); 
      giraffewindow.setDefaultCloseOperation(DISPOSE_ON_CLOSE); 

      /* 
      * I want to have a rollover on EACH IMAGE so that when they rollover the image you see different text. 
      */ 

     } 

आप बार जब आप इस पढ़ने के लिए ले जा रहे हैं के लिए बहुत बहुत धन्यवाद, मैं वास्तव में एक साथी प्रोग्रामर की मदद करने के प्रयास में सराहना करता हूं!

+0

मुझे लगता है कि आपको 'माउसइंटर' और 'माउस एक्सक्टेड' ईवेंट ट्रैक करने के लिए 'माउस लिस्टनर' की आवश्यकता होगी और तदनुसार लेबल के टेक्स्ट को बदलें। [माउस श्रोता कैसे लिखें] से शुरू करें (http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html) – MadProgrammer

+0

'मैं इस बात से परिचित हूं कि यह छवि कैसे करें जब छवि JLabel नहीं है '- आप यह कैसे करेंगे? – camickr

+0

@MadProgrammer क्या उसे अपनी कक्षा बनाने की ज़रूरत नहीं है जो जेएलएबल को बढ़ाती है, फिर वहां से माउसलिस्टर लागू करें? –

उत्तर

4

How to Write a Mouse Listener पर एक नज़र डालने से शुरू करें।

असल में, आप हर लेबल के लिए एक MouseListener देते हैं और mouseEntered और mouseExited घटनाओं पर नजर रखने, अपनी आवश्यकताओं के

LabelText

import java.awt.EventQueue; 
import java.awt.GridLayout; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      try { 
       JLabel left = new JLabel(new ImageIcon(ImageIO.read(...)))); 
       left.setVerticalTextPosition(JLabel.BOTTOM); 
       left.setHorizontalTextPosition(JLabel.CENTER); 
       left.setHorizontalAlignment(JLabel.CENTER); 
       left.setVerticalAlignment(JLabel.CENTER); 
       left.setText(" "); 
       JLabel right = new JLabel(new ImageIcon(ImageIO.read(...)))); 
       right.setVerticalTextPosition(JLabel.BOTTOM); 
       right.setHorizontalTextPosition(JLabel.CENTER); 
       right.setHorizontalAlignment(JLabel.CENTER); 
       right.setVerticalAlignment(JLabel.CENTER); 
       right.setText(" "); 

       setLayout(new GridLayout(1, 2)); 

       add(left); 
       add(right); 

       left.addMouseListener(new MouseAdapter() { 
        @Override 
        public void mouseEntered(MouseEvent e) { 
         left.setText("I'm on the left"); 
        } 

        @Override 
        public void mouseExited(MouseEvent e) { 
         left.setText(" "); 
        } 
       }); 
       right.addMouseListener(new MouseAdapter() { 
        @Override 
        public void mouseEntered(MouseEvent e) { 
         right.setText("I'm on the right"); 
        } 

        @Override 
        public void mouseExited(MouseEvent e) { 
         right.setText(" "); 
        } 
       }); 
      } catch (IOException exp) { 
       exp.printStackTrace(); 
      } 
     } 

    } 

} 

अनुसार लेबल राज्य को अद्यतन करने के लिए चाहते हैं आप भी एक है करने के लिए चाहते हो सकता है Reading/Loading an Image

+0

आपको बहुत बहुत धन्यवाद! जिज्ञासा से बाहर, क्या माउस श्रोता के पास माउस श्रोता तक पहुंचने की संख्या के आधार पर विभिन्न आउटपुट होना संभव है? उदाहरण के लिए, यदि मैं एक बार "एक बार" प्रदर्शित करने के बाद कुछ पर होवर करता हूं और यदि मैं इसे दो बार घुमाता हूं तो यह "दो बार" प्रदर्शित करता है? –

+0

हां, माउस श्रोता को कैसे सेट अप करते हैं, इस आधार पर, मूल रूप से आपको केवल एक काउंटर की आवश्यकता होती है जिसे आप बढ़ाते हैं। यदि आप एक श्रोता का उपयोग कर रहे हैं, तो आप किसी प्रकार का मानचित्र इस्तेमाल कर सकते हैं – MadProgrammer

3

पर आप कुछ ऐसा करके एक सामान्य श्रोता भी बना सकते हैं जैसे:

ImageIcon giraffe = new ImageIcon(...); 
giraffe.setDescription("Giraffe Description"); 

फिर अपने श्रोता की तरह कुछ दिख सकता है:

MouseListener ml = new MouseAdapter() 
{ 
    @Override 
    public void mouseEntered(MouseEvent e) 
    { 
     JLabel label = (JLabel)e.getSource(); 
     ImageIcon icon = (ImageIcon)label; 
     label.setText(icon.getDescription()); 
    } 

    @Override 
    public void mouseExited(MouseEvent e) 
    { 
     JLabel label = (JLabel)e.getSource(); 
     label.setText(" "); 
    } 
} 

और आप लेबल करना श्रोता जोड़ें:

JLabel giraffeLabel = new JLabel(giraffe); 
giraffe.addMouseListener(ml); 

ही श्रोता अपने अन्य JLabel के लिए इस्तेमाल किया जा सकता है क्योंकि घटना घटक घटना के साथ उत्पन्न घटक के साथ जानता है।

संबंधित मुद्दे