2015-08-20 6 views
7

Ho un codice con layout di griglia e due immagini JLabel. Non voglio che alcun testo appaia ogni volta che passo su ciascuna immagine. Ho familiarità su come farlo quando l'immagine non è una JLabel, ma ho cercato in tutto il web per scoprire come farlo mentre si tratta di una JLabel senza nome. Le due immagini mi wan't di avere, con plico separato più di messaggi sono:Rollover su JLabel che consiste di un'immagine all'interno della griglia?

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

Ecco il mio codice:

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. 
      */ 

     } 

grazie mille per il tempo che sta assumendo per la lettura di questo, Apprezzo molto lo sforzo che stai facendo per aiutare un collega programmatore!

+0

Suppongo che sia necessario un 'MouseListener' per tenere traccia degli eventi' mouseEntered' e 'mouseExited' e modificare di conseguenza il testo dell'etichetta. Inizia con [Come scrivere un listener di mouse] (http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html) – MadProgrammer

+0

'Ho familiarità su come farlo quando l'immagine non è una JLabel '- come faresti? – camickr

+0

@MadProgrammer Non avrebbe dovuto creare la propria classe che estende JLabel, quindi implementare MouseListener da lì? –

risposta

4

Inizia dando un'occhiata a How to Write a Mouse Listener.

In sostanza, si desidera collegare un MouseListener per ogni etichetta e monitorare i mouseEntered e mouseExited eventi, aggiornando lo stato dell'etichetta secondo le vostre esigenze

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

    } 

} 

Si potrebbe anche voler avere un guarda Reading/Loading an Image

+0

Grazie mille! Tuttavia, per curiosità, è possibile avere il listener del mouse con output diversi in base al numero di accessi del mouse al listener? Ad esempio, se passo il mouse su qualcosa una volta che viene visualizzato "una volta" e se lo alzo su due volte viene visualizzato "due volte"? –

+0

Sì, a seconda di come si imposta il listener del mouse, in pratica è sufficiente un contatore che si incrementa. Se utilizzi un solo ascoltatore, puoi utilizzare una mappa se di qualche tipo – MadProgrammer

3

Puoi anche creare un listener generico facendo qualcosa del tipo:

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

Poi il vostro ascoltatore potrebbe essere simile:

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

e si aggiunge l'ascoltatore all'etichetta:

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

Lo stesso ascoltatore può essere utilizzato per l'altro JLabel perché l'evento il codice conosce con il componente generato l'evento.

Problemi correlati