2014-09-29 5 views
0

новичка здесьmouseMoved событие не может получить местоположение курсора

это мой код, и я хочу, когда курсор попасть в зеленый JPanel (здесь «p2»), программа будет иметь еще JPanel (здесь «p1 "), чтобы показать некоторую информацию об объекте. (например, ToolTip)

Но когда курсор попадает в 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» * Наиболее вероятно, что панель потребляет события мыши, которые были бы предназначенные для компонента под ним. Одним из распространенных исправлений является добавление слушателя к каждому компоненту, который должен обнаруживать события мыши. –

+2

BTW - это похоже на * ничего, связанное с [тегом: javascript]. –

ответ

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

Извините, но это не сработает ... пожалуйста, найдите другой способ ... Спасибо за ваш ans –

Смежные вопросы