如何在听力儿童组件之上工作?

时间:2016-12-21 01:02:52

标签: java swing user-interface

我正在挑战(也需要)制作我自己的窗户,以便我可以自定义它甚至超过挥杆的能力。

到目前为止,一切都很顺利,除了调整大小外,我可以做普通Windows窗口可以做的所有事情。我想首先使用MouseMotionListener检测鼠标何时接近边缘并捕获MouseMoved事件。它按计划工作除外。这是一个代码示例:

public class foo extends MouseAdapter
{
  private JFrame frame
  private Point p;

  public foo(JFrame bar)
  {
    frame = bar;
  }

  @Override
  public void MouseMoved(MouseEvent e)
  {
    apoint = e.getPoint();
    System.out.println(apoint.toString());
  }
}

....其他地方

public class zoof extends JFrame
{
  public zoof()
  {
   setSize(500,500);
   setUndecorated(true);
   JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
   panel.setSize(500, 100);
   JPanel cpanel = new JPanel();
   panel.addMouseListener(new x(this));
   panel.addMouseMotionListener(new x(this));
   Xbutton c = new Xbutton();
   Ebutton e = new Ebutton();
   HButton m = new Hbutton();
   addMouseMotionListener(new foo(this));
   panel.add(sh);
   panel.add(ex);
   panel.add(close);
   add(panel, BorderLayout.NORTH);
   add(cpanel, BorderLayout.CENTER);
  }
}

除非鼠标位于面板顶部(带按钮的面板),否则输出效果非常好。我有两个假设,说明为什么这可能不起作用

  1. 线程不允许帧侦听器做出反应,因为面板已经在侦听并且无法专注于jframe侦听器。
  2. 面板侦听器会覆盖jframe侦听器
  3. 无论是哪种情况,它都是我喜欢你们输入的东西。非常感谢!

1 个答案:

答案 0 :(得分:2)

首先,你的解决方案不是正确的方法恕我直言。如果起点(鼠标按下)位于边界区域,我不会关心运动事件,仅适用于鼠标拖动事件。

现在,对于你的问题,是什么让你的听众不对这些事件做出反应;如果没有你的假设是正确的,那么如果找到了听力的孩子,那么事件就不会被发送给父母。尝试删除面板的监听器,框架应该接收事件。查看this post了解如何转发事件的信息。