2014-09-29 19 views
0

新手的位置,在這裏的mouseMoved事件不能得到光標

這是我的代碼,我想,當光標進入綠色的JPanel(這裏是「P2」),計劃將有另外的JPanel(這裏是「P1 「)顯示關於Object的一些信息。 (像一個工具提示)

但是,當光標進入JPanel p2 ... mouseMove無法獲得光標的位置......它只適用於當我刪除JPanel p2。請幫幫我

注意:它仍然在JPanel p2的邊界上工作;

import javax.management.Attribute; 
 
import javax.swing.JButton; 
 
import javax.swing.JFrame; 
 
import javax.swing.JLabel; 
 
import javax.swing.JOptionPane; 
 
import javax.swing.JPanel; 
 
import javax.swing.ImageIcon; 
 
import javax.swing.JTextPane; 
 
import javax.swing.border.EmptyBorder; 
 
import javax.swing.text.AttributeSet.FontAttribute; 
 

 
import org.w3c.dom.events.EventTarget; 
 
import org.w3c.dom.events.MouseEvent; 
 
import org.w3c.dom.views.AbstractView; 
 

 
import java.awt.BorderLayout; 
 
import java.awt.Color; 
 
import java.awt.Dimension; 
 
import java.awt.EventQueue; 
 
import java.awt.FlowLayout; 
 
import java.awt.Font; 
 
import java.awt.Graphics; 
 
import java.awt.GridLayout; 
 
import java.awt.Image; 
 
import java.awt.MouseInfo; 
 
import java.awt.Rectangle; 
 
import java.awt.event.MouseAdapter; 
 
import java.awt.event.MouseListener; 
 
import java.awt.event.MouseMotionListener; 
 
import java.text.AttributedCharacterIterator; 
 
import java.util.Locale; 
 

 
public class InterfaceSubject extends JFrame { 
 

 
\t public JPanel contentPane, p1, p2; 
 
\t public JButton bt1; 
 
\t public JLabel lb2; 
 
\t public JTextPane tp1, tp2, tp3; 
 

 
\t public InterfaceSubject() { 
 
\t \t this.setResizable(false); 
 
\t \t setTitle("Demo"); 
 
\t \t setDefaultCloseOperation(EXIT_ON_CLOSE); 
 
\t \t setBounds(100, 20, 1024, 768); 
 

 
\t \t bt1 = new JButton(); 
 
\t \t p1 = new JPanel(); 
 
\t \t p1.setLayout(new BorderLayout()); 
 
     p1.setBackground(Color.yellow); 
 

 

 
\t \t p2 = new JPanel(); 
 
\t \t GridLayout gr = new GridLayout(); 
 
\t \t gr.setColumns(1); 
 
\t \t gr.setRows(3); 
 
\t \t p2.setLayout(gr); 
 

 
\t \t lb2 = new JLabel(); 
 

 
\t \t tp1 = new JTextPane(); 
 
\t \t tp1.setForeground(Color.BLUE); 
 
\t \t tp1.setBackground(Color.green); 
 
\t \t tp1.setText("MMH: 212121"); 
 

 
\t \t tp2 = new JTextPane(); 
 
\t \t tp2.setForeground(Color.BLUE); 
 
\t \t tp2.setBackground(Color.green); 
 
\t \t tp2.setText("Tên MH: Hello"); 
 

 
\t \t tp3 = new JTextPane(); 
 
\t \t tp3.setForeground(Color.BLUE); 
 
\t \t tp3.setBackground(Color.green); 
 
\t \t tp3.setText("TC : 1"); 
 

 
\t \t contentPane = new ImagePanel(
 
\t \t \t \t new ImageIcon("images\\formtkb.jpg").getImage()); 
 
\t \t contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
 

 
\t \t p2.setBounds(60, 121, 125, 75); 
 

 
\t \t p2.add(tp1); 
 
\t \t p2.add(tp2); 
 
\t \t p2.add(tp3); 
 

 
\t \t contentPane.add(p2); 
 

 
\t \t setContentPane(contentPane); 
 

 
\t \t contentPane.setLayout(null); 
 

 
\t \t this.addMouseMotionListener(new MouseMotionListener() { 
 

 
\t \t \t @Override 
 
\t \t \t public void mouseMoved(java.awt.event.MouseEvent arg0) { 
 

 
\t \t \t \t if ((arg0.getX()) >= (60) && arg0.getX() <= (60 + 125)) { 
 
\t \t \t \t \t if ((arg0.getY()) >= (121 + 25) 
 
\t \t \t \t \t \t \t && (arg0.getY()) <= (121 + 100)) { 
 
\t \t \t \t \t \t p1.setVisible(true); 
 
\t \t \t \t \t \t p1.setBounds(new Rectangle(arg0.getPoint(), 
 
\t \t \t \t \t \t \t \t new Dimension(200, 200))); 
 
\t \t \t \t \t \t lb2.setText(arg0.getX() + "/" + arg0.getY()); 
 

 
\t \t \t \t \t \t p1.add(lb2, BorderLayout.SOUTH); 
 
\t \t \t \t \t \t contentPane.add(p1); 
 
\t \t \t \t \t } else { 
 
\t \t \t \t \t \t p1.setVisible(false); 
 
\t \t \t \t \t } 
 
\t \t \t \t } else { 
 
\t \t \t \t \t p1.setVisible(false); 
 
\t \t \t \t } 
 

 
\t \t \t } 
 

 
\t \t \t @Override 
 
\t \t \t public void mouseDragged(java.awt.event.MouseEvent arg0) { 
 
\t \t \t \t // TODO Auto-generated method stub 
 

 
\t \t \t } 
 
\t \t }); 
 

 
\t } 
 

 
} 
 

 
class ImagePanel extends JPanel { 
 

 
\t /** 
 
\t \t * 
 
\t \t */ 
 
\t private Image img; 
 

 
\t public ImagePanel(String img) { 
 
\t \t this(new ImageIcon(img).getImage()); 
 
\t } 
 

 
\t public ImagePanel(Image img) { 
 
\t \t this.img = img; 
 
\t \t Dimension size = new Dimension(img.getWidth(null), img.getHeight(null)); 
 
\t \t setPreferredSize(size); 
 
\t \t setMinimumSize(size); 
 
\t \t setMaximumSize(size); 
 
\t \t setSize(size); 
 
\t \t setLayout(null); 
 

 
\t } 
 

 
\t public void paintComponent(Graphics g) { 
 
\t \t g.drawImage(img, 0, 100, null); 
 
\t } 
 

 
}

+2

*「的mouseMove不能得到光標的位置...這隻有當我刪除的JPanel P2工作」 *這是最有可能的是,面板的消費將被運往鼠標事件組件在它下面。一個常見的解決方法是將偵聽器添加到需要檢測鼠標事件的每個組件。 – 2014-09-29 02:19:30

+2

順便說一句 - 這似乎有*沒有*與[標籤:JavaScript]。 – 2014-09-29 02:20:44

回答

0

添加的MouseMotionListener爲您的面板。像

p1.addMouseMotionListener(new MouseMotionListener() { 
      @Override 
      public void mouseMoved(java.awt.event.MouseEvent arg0) { 

      } 
    }); 


    p2.addMouseMotionListener(new MouseMotionListener() { 
      @Override 
      public void mouseMoved(java.awt.event.MouseEvent arg0) { 

      } 
    }); 
+0

對不起,但它不工作...請找到另一種方式...感謝您的答案 – 2014-09-30 00:53:31