在我的JDesktopPane上放置了4个JInternalFrame,每个JInternalFrame里面都有一些JTable等组件
这些小界面需要实现鼠标事件,移动\进入等,来显示不同的tooltip或颜色但现在的问题是只有获得焦点的JInternalFrame的内部界面才可以得到鼠标事件,如果JInternalFrame A是有焦点的,那么JInternalFrame B上的Component就没办法捕捉到MouseEvent了,除非在JInternalFrame B上点击一下(但业务要求不可以这样)怎么才能实现鼠标移动到任何Component都有鼠标事件呢?或者在鼠标进入一个JInternalFrame后,这个JInternalFrame自动获得焦点呢?不用各位给源代码,只要给个思路就可以,但最好测试过。
分不够可以另外加。Thanks

解决方案 »

  1.   

    我试了是可以的呀?import java.awt.BorderLayout;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;import javax.swing.*;public class T {
    public static void main(String[] args) {
    JTable table1 = new JTable(5, 5);
    table1.addMouseMotionListener(new MouseMotionAdapter() {
    public void mouseMoved(MouseEvent e)
    {
    System.out.println("table1 mouse move " + e.getPoint());
    }
    });
    table1.addMouseListener(new MouseAdapter() {
    public void mouseEntered(MouseEvent e)
    {
    System.out.println("table1 mouse enter");
    }
    }); JTable table2 = new JTable(5, 5);
    table2.addMouseMotionListener(new MouseMotionAdapter() {
    public void mouseMoved(MouseEvent e)
    {
    System.out.println("table2 mouse move " + e.getPoint());
    }
    });
    table2.addMouseListener(new MouseAdapter() {
    public void mouseEntered(MouseEvent e)
    {
    System.out.println("table2 mouse enter");
    }
    });

    JDesktopPane desktop = new JDesktopPane(); JInternalFrame f1 = new JInternalFrame("f1", true);
    f1.getContentPane().add(new JScrollPane(table1));
    desktop.add(f1);
    f1.setSize(200, 200);
    f1.setVisible(true); JInternalFrame f2 = new JInternalFrame("f2", true);
    f2.getContentPane().add(new JScrollPane(table2));
    desktop.add(f2);
    f2.setSize(200, 200);
    f2.setLocation(100, 100);
    f2.setVisible(true);

    JFrame f = new JFrame();
    f.getContentPane().add(desktop, BorderLayout.CENTER);
    f.setSize(600, 600);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
    }
      

  2.   

    问题找到了我是通过JTable的CellRender里面table.getMousePosition();得到鼠标的位置
    然后再根据rowAtPoint得到当前鼠标在哪行,根据这个来实现不同的cell绘制
    但是如果焦点不在当前table上,getMousePosition()得到的point是null原来不是鼠标捕获的问题。现在解决了谢谢