2012-07-26 137 views
3

如何添加JLabel懸停?就像您將鼠標移動到頂部時一樣,新圖片將與其重疊。我知道如何使它與按鈕一起工作,但是相同的技術不適用於JLabel。有誰會引導我加入JLabel懸停?請和謝謝。如何添加jlabel圖像懸停?

package src; 

import java.awt.Dimension; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

/* 
* @Author - 0x29A 
* 
* 
*/ 
public class Jframe { 

    public static void main(final String args[]) { 

     /* 
     * @Images 
     */ 
     final ImageIcon icon = new ImageIcon("Data/button.png"); 
     final JLabel label = new JLabel(icon); 

     final ImageIcon icon1 = new ImageIcon("Data/button1.png"); 
     final JLabel label1 = new JLabel(icon1); 

     final ImageIcon icon2 = new ImageIcon("Data/button2.png"); 
     final JLabel label2 = new JLabel(icon2); 

     final ImageIcon icon3 = new ImageIcon("Data/button3.png"); 
     final JLabel label3 = new JLabel(icon3); 

     final ImageIcon icon4 = new ImageIcon("Data/button4.png"); 
     final JLabel label4 = new JLabel(icon4); 

     final ImageIcon icon5 = new ImageIcon("Data/button5.png"); 
     final JLabel label5 = new JLabel(icon5); 

     final ImageIcon icon6 = new ImageIcon("Data/background.png"); 
     final JLabel label6 = new JLabel(icon6); 

     /* 
     * @Image Location 
     */ 
     label.setBounds(282, 255, 96, 96); 
     label1.setBounds(384, 255, 96, 96); 
     label2.setBounds(282, 153, 96, 96); 
     label3.setBounds(384, 153, 198, 96); 
     label4.setBounds(181, 152, 96, 96); 
     label5.setBounds(181, 255, 96, 96); 
     label6.setBounds(0, 0, 765, 503); 

     /* 
     * @Frame 
     */ 
     final JFrame frame = new JFrame("test"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setPreferredSize(new Dimension(765, 503)); 
     frame.setLayout(null); 
     frame.add(label); 
     frame.add(label1); 
     frame.add(label2); 
     frame.add(label3); 
     frame.add(label4); 
     frame.add(label5); 
     frame.add(label6); 
     frame.pack(); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+1

I首先學習如何使用MouseListener和MouseMotionListener,[this](http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html)和[this](http:// docs .oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html)教程可以提供幫助。你有沒有嘗試過任何東西? – 2012-07-26 22:06:33

+0

感謝您的支持,但問題是我不知道如何將這些代碼與我擁有的代碼一起使用。你可以通過爲我的一個標籤添加一個鼠標事件來啓動我,然後我可以按照你的做法自行添加其他內容嗎?這真的很感謝。 – 0x29A 2012-07-26 22:10:48

+0

我的理念是,如果你至少先給自己一個首選,那麼你會獲得更多***。此外,我們可以通過查看您可能有哪些不正確的假設來更好地幫助您。最後,你沒有失去嘗試。 – 2012-07-26 22:17:11

回答

3

可以使用MouseEntered鼠標事件對於這一點,寫這樣的代碼 JLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("image location")));

+0

+1只有在我發佈我的答案後纔看到。好建議:) – 2012-07-26 22:27:12

+0

exex,謝謝! – 0x29A 2012-07-26 22:36:09

9

做了一個簡單的例子,它採用了MouseListenerMosueAdapter來監視JLabelmouseExited()mouseEntered()事件,並且在任這些方法被稱爲(即,當鼠標在標籤上或不在標籤上時)圖片被改變:

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.event.MouseAdapter; 
import javax.swing.*; 

public class LabelHoverTest extends JFrame { 

    Icon pic1; 
    Icon pic2; 
    JLabel label; 

    public LabelHoverTest(String title) { 
     super(title); 
     pic1 = UIManager.getIcon("OptionPane.informationIcon"); 
     pic2 = UIManager.getIcon("OptionPane.questionIcon"); 
     createAndShowUI(); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new LabelHoverTest("Label Hover Test").setVisible(true); 
      } 
     }); 
    } 

    private void createAndShowUI() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setResizable(false); 
     addComponentsToPane(getContentPane()); 
     setSize(300, 300); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    private void addComponentsToPane(Container contentPane) { 
     label = new JLabel(pic1); 

     contentPane.add(label, BorderLayout.CENTER); 

     label.addMouseListener(new MouseAdapter() { 

      @Override 
      public void mouseEntered(java.awt.event.MouseEvent evt) { 
       label.setIcon(pic2); 
      } 

      @Override 
      public void mouseExited(java.awt.event.MouseEvent evt) { 
       label.setIcon(pic1); 
      } 
     }); 
    } 
} 
+1

非常感謝! – 0x29A 2012-07-26 22:31:19

+2

+1例子; 'UIManager.getIcon',顯示[here](http://stackoverflow.com/a/7935040/230513),可能更自我包含; '包()'? – trashgod 2012-07-26 22:36:32

+1

@trashgod美麗,添加到我的回答:) – 2012-07-26 22:40:34