новичка здесь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 }
}
* «MouseMove не может получить местоположение курсора ... Она работает только тогда, когда я удаляю JPanel p2» * Наиболее вероятно, что панель потребляет события мыши, которые были бы предназначенные для компонента под ним. Одним из распространенных исправлений является добавление слушателя к каждому компоненту, который должен обнаруживать события мыши. –
BTW - это похоже на * ничего, связанное с [тегом: javascript]. –