JPanel的鼠标事件监听器,如果有多个JPanel,怎么不能内层处理完后,没有向上传递呢,
比如:
JPanel p1;
JPanel p2;
p2是p1的父级,p2.getParent()方法可以取得到
我在p1内处理了mouseDragged事件,p2就接收不到mouseDragged事件了,怎么办,
怎么样才能让它向上传递呢,
p1处理事件完后继续也能让在p2内的相同事件也能接收到。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【chensjmail】截止到2008-07-11 16:30:28的历史汇总数据(不包括此帖):
    发帖的总数量:11                       发帖的总分数:470                      每贴平均分数:42                       
    回帖的总数量:119                      得分贴总数量:45                       回帖的得分率:37%                      
    结贴的总数量:1                        结贴的总分数:100                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:10                       未结的总分数:370                      
    结贴的百分比:9.09  %               结分的百分比:21.28 %                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
      

  2.   

    呵呵,试过了,p1的坐标和p2的坐标是不同的,所以传入的MouseEvent的坐标是不对的,因为它是p2的坐标
      

  3.   

    可以不用函数,直接调用dispatchEvent方法,也是存在我上面所说的问题 
      

  4.   

    修改MouseEvent,然后再dispatchEvent,不过,为啥要这么做?如果非这样做不可的话,就需要考虑换种方式了
      

  5.   

    因为我有多个JPanel容器嵌套,每个容器都有不同的处理鼠标按下拖拽的方法,所以要这样做,有没有其它的做法?
      

  6.   

    这样吗?
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;public class TransferEvent extends JFrame {    private JPanel panel1 = new JPanel();    private JPanel panel2 = new JPanel();    public TransferEvent() {
            this.panel1.setPreferredSize(new Dimension(150, 150));
            this.panel1.setBackground(Color.RED);
            this.panel2.setPreferredSize(new Dimension(50, 50));
            this.panel2.setBackground(Color.BLUE);
            this.panel1.add(this.panel2);
            this.getContentPane().add(this.panel1);        this.panel1.addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    super.mousePressed(e);
                    System.out.println("panel1 mousePressed");
                    MouseEvent e1 = SwingUtilities.convertMouseEvent(panel1, e, panel2);
                    panel2.dispatchEvent(e1);
                }
            });
            this.panel2.addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    super.mousePressed(e);
                    System.out.println("panel2 mousePressed");
                }
            });
        }    /**
         * @param args
         */
        public static void main(String[] args) {
            TransferEvent te = new TransferEvent();
            te.setVisible(true);
            te.pack();
            te.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }}
      

  7.   

    对就是差不多一个意思,我是这么解决的:
    parent.dispatchEvent(new MouseEvent(parent,e.getID(),e.getWhen(),e.getModifiers(),mousePosition.x,mousePosition.y,e.getClickCount(),e.isPopupTrigger()));
    你的:
    parent.dispatchEvent(SwingUtilities.convertMouseEvent(e.getComponent(), e, parent));还有一个贴,你去回,一起给分