2015-08-20 12 views
7

Tôi có mã có bố cục lưới và hai hình ảnh JLabel. Tôi không phải một số văn bản xuất hiện mỗi khi tôi cuộn qua từng hình ảnh. Tôi quen thuộc về cách làm điều này khi hình ảnh không phải là một JLabel, nhưng đã tìm kiếm trên tất cả các trang web để tìm cách làm điều này trong khi nó là một JLabel chưa được đặt tên. Hai hình ảnh tôi wan't có, với cuộn riêng biệt so với thông điệp là:Rollover trên JLabel bao gồm hình ảnh trong bố cục lưới?

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

Đây là mã của tôi:

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

     } 

Cảm ơn bạn rất nhiều vì thời gian bạn đang dùng cho việc đọc này, Tôi thực sự đánh giá cao những nỗ lực bạn đang đưa vào giúp một lập trình viên đồng nghiệp!

+0

Tôi đoán bạn sẽ cần một 'MouseListener' để theo dõi các sự kiện' mouseEntered' và 'mouseExited' và thay đổi văn bản của nhãn cho phù hợp. Bắt đầu với [Cách viết một trình nghe chuột] (http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html) – MadProgrammer

+0

'Tôi quen thuộc về cách thực hiện điều này khi hình ảnh không phải là một JLabel '- làm thế nào bạn sẽ làm điều này? – camickr

+0

@MadProgrammer Anh ấy sẽ không phải tạo ra lớp riêng của mình để mở rộng JLabel, sau đó triển khai MouseListener từ đó? –

Trả lời

4

Bắt đầu bằng cách xem How to Write a Mouse Listener.

Về cơ bản, bạn muốn đính kèm một MouseListener mỗi nhãn và theo dõi việc mouseEnteredmouseExited sự kiện, cập nhật trạng thái nhãn theo yêu cầu của bạn

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

    } 

} 

Bạn cũng có thể muốn có một xem Reading/Loading an Image

+0

Cảm ơn bạn rất nhiều! Trong sự tò mò mặc dù, có thể có người nghe chuột có đầu ra khác nhau dựa trên số lần người nghe chuột được truy cập? Ví dụ, nếu tôi di chuột qua một cái gì đó khi nó hiển thị "một lần" và nếu tôi di chuột qua nó hai lần nó hiển thị "hai lần"? –

+0

Có, tùy thuộc vào cách bạn thiết lập trình nghe chuột, về cơ bản bạn chỉ cần một bộ đếm mà bạn tăng. Nếu bạn đang sử dụng một người nghe duy nhất, thì bạn có thể sử dụng Bản đồ nếu một số loại – MadProgrammer

3

Bạn cũng có thể tạo người nghe chung bằng cách thực hiện một cái gì đó như:

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

Sau đó, người nghe của bạn có thể giống như thế:

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

Và bạn thêm người nghe đến nhãn:

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

Người nghe tương tự có thể được sử dụng cho JLabel khác của bạn bởi vì sự kiện này mã biết với thành phần tạo ra sự kiện.

Các vấn đề liên quan