2015-08-20 5 views
7

Ich habe einen Code mit Rasterlayout und zwei JLabel-Bildern. Ich möchte, dass jedes Mal, wenn ich über jedes Bild rolle, ein Text erscheint. Ich weiß, wie man das macht, wenn das Bild kein JLabel ist, aber ich habe das ganze Web durchsucht, um herauszufinden, wie man das macht, während es ein unbenanntes JLabel ist. Die beiden Bilder I wan't zu haben, mit separaten Rolle über Meldungen sind:Rollover auf JLabel, die aus einem Bild im Rasterlayout besteht?

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

Hier ist mein Code:

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

     } 

Vielen Dank für die Zeit, die Sie für das Lesen dieses einnehmen, Ich schätze die Bemühungen, die Sie einem anderen Programmierer geben!

+0

Ich denke, Sie brauchen einen 'MouseListener', um die' mouseEntered' und 'mouseExited' Events zu verfolgen und den Text des Labels entsprechend zu ändern. Beginnen Sie mit [Wie schreibe ich einen Mouse Listener] (http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html) – MadProgrammer

+0

'Ich bin vertraut, wie man das macht, wenn das Bild kein JLabel ist '- Wie würdest du das machen? – camickr

+0

@MadProgrammer Müsste er nicht seine eigene Klasse erstellen, die JLabel erweitert, und dann MouseListener von dort implementieren? –

Antwort

4

Beginnen Sie mit einem Blick auf How to Write a Mouse Listener.

Im Grunde wollen Sie eine MouseListener auf jedem Etikett befestigen und die mouseEntered und mouseExited Ereignisse zu überwachen, die Aktualisierung auf dem Schild nach Ihren Wünschen

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

    } 

} 

Vielleicht möchten Sie auch eine haben siehe Reading/Loading an Image

+0

Vielen Dank! Aus Neugier ist es jedoch möglich, dass der Maus-Listener verschiedene Ausgaben hat, basierend auf der Anzahl der Zugriffe auf den Maus-Listener. Zum Beispiel, wenn ich den Mauszeiger über etwas halte, sobald er "einmal" anzeigt, und wenn ich zweimal darüber schwebe, wird "zweimal" angezeigt? –

+0

Ja, abhängig davon, wie Sie den Maus-Listener einrichten, benötigen Sie im Grunde nur einen Zähler, den Sie erhöhen. Wenn Sie einen einzelnen Listener verwenden, können Sie eine Map verwenden, wenn eine Art vorhanden ist – MadProgrammer

3

Sie können auch einen generischen Listener erstellen, indem Sie beispielsweise Folgendes tun:

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

Dann könnte Ihre Zuhörer etwas wie folgt aussehen:

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

Und Sie fügen Sie den Hörer auf das Etikett:

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

Das gleiche Hörer kann für andere JLabel verwendet werden, da die Veranstaltung Code weiß mit der Komponente das Ereignis generiert.

Verwandte Themen