2013-06-20 70 views
0

我想知道是否有任何方法將重點放在我的JLabel上。 我有一系列的標籤,我想知道我是否選擇了其中任何一個。鼠標焦點在JLabel

我想使用MouseListener,但不知道JLabel的什麼屬性用於設置焦點或在某些模式下說我選擇了該標籤。

謝謝大家,對不起我的英文不好。

+0

你想設置**焦點還是要檢測**焦點? –

+0

我想檢測是否有人點擊我的標籤 – Rotom92

+0

使用Jlabel.addMouseListener(....)進行測試。 – Chuidiang

回答

0

要檢測是否有人在標籤上點擊,這個代碼將工作:

package com.sandbox; 

import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.WindowConstants; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

public class SwingSandbox { 

    public static void main(String[] args) { 
     JFrame frame = buildFrame(); 

     JPanel panel = new JPanel(); 
     BoxLayout layout = new BoxLayout(panel, BoxLayout.X_AXIS); 
     panel.setLayout(layout); 
     frame.getContentPane().add(panel); 

     JLabel label = new JLabel("Click me and I'll react"); 
     label.addMouseListener(new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent e) { 
       System.out.println("clicked!"); 
      } 
     }); 
     panel.add(label); 
     panel.add(new JLabel("This label won't react")); 
    } 


    private static JFrame buildFrame() { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.setSize(200, 200); 
     frame.setVisible(true); 
     return frame; 
    } 


} 
+0

label.setSize()是什麼意思?無論如何,佈局經理都會忽略它。 – camickr

+0

@camickr那是因爲「歷史」原因。我將刪除該行。 –

0

您可以添加FocusListenerJLabel這樣,每當它接收的焦點,它的聽衆將得到通知。這是一個樣本測試。

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.FocusAdapter; 
import java.awt.event.FocusEvent; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingUtilities; 

public class JLabelFocusTest { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       JFrame frame = new JFrame("Demo"); 

       frame.getContentPane().setLayout(new BorderLayout()); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       final JLabel lblToFocus = new JLabel("A FocusEvent will be fired if I got a focus."); 
       JButton btnFocus = new JButton("Focus that label now!"); 

       btnFocus.addActionListener(new ActionListener() { 
        @Override 
        public void actionPerformed(ActionEvent arg0) { 
         lblToFocus.requestFocusInWindow(); 
        } 
       }); 

       lblToFocus.addFocusListener(new FocusAdapter() { 
        @Override 
        public void focusGained(FocusEvent e) { 
         super.focusGained(e); 

         System.out.println("Label got the focus!"); 
        } 
       }); 

       frame.getContentPane().add(lblToFocus, BorderLayout.PAGE_START); 
       frame.getContentPane().add(btnFocus, BorderLayout.CENTER); 

       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 
}