【问题标题】:Adding key and mouse listener添加键和鼠标侦听器
【发布时间】:2011-12-18 18:57:53
【问题描述】:

我尝试向 JFrame 添加键和鼠标侦听器,但没有成功,我还发现 JFrame 无法获得焦点。我有一个函数可以加载缓冲图像,我想在整个图像维度中添加鼠标和键侦听器。

  public void imageloader(BufferedImage image) throws InterruptedException {

        // frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Dimension dimension = new Dimension(image.getWidth(), image.getHeight());
        setSize(200, 100);
        setVisible(true);
        label.removeAll(); //label is Jlabel
        label.setIcon(new ImageIcon(image));
        frame.setSize(dimension);
        label.revalidate();
        JScrollPane pane = new JScrollPane(label,
                ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        frame.getContentPane().add(pane);
        frame.setSize(dimension);
       // frame.setVisible(true);


    }

如何在不从该函数中移动部件的情况下将鼠标和按键侦听器添加到该图像帧中?

【问题讨论】:

  • 请问你是tired 还是tried
  • 嘿嘿嘿你的问题谈到第一个。来自选项:-),感谢编辑
  • hmmm 也许,不确定,因为你不能发布所需的代码,只有代码被剪断,试图将它包装到 invokeLater() 中,正如这里所讨论的 stackoverflow.com/questions/7966287/…

标签: java swing mouseevent jframe keyevent


【解决方案1】:

使用KeyBindings 代替KeyListener,例如here

原因是 Swing 处理事件的方式。您需要一个带有焦点的小部件,KeyListener 才能工作 - 没有焦点,任何 KeyListeners 都会被忽略(否则,键入会添加到 UI 中的所有 TextFields,而不仅仅是具有焦点的那个)。

原始的KeyBindings API 不关心焦点 - 如果没有子窗口处理该事件,则将调用侦听器。

【讨论】:

  • 我在处理这些事件时没有问题。我只是想以某种方式将侦听器添加到图像中。
  • 我更新了答案,让 KeyListener 和 KeyBinding 之间的区别更加明显。
  • +1,用于键绑定。 @aneal 是的,您会遇到问题,因为标签没有获得焦点,因此不会生成关键事件。
  • 我觉得很难理解。如果我没记错 KeyBinding 用于个人键,但我试图获取每个按下的键的键码,而不管按下的是什么键。那么如何使用 KeyBinding 做到这一点?
【解决方案2】:

将 MouseListener 添加到标签。为按键事件使用按键绑定。

【讨论】:

    【解决方案3】:

    我使用Layered panes 解决了这个问题。我使用一个窗格显示缓冲图像,使用下一个窗格监听鼠标和键盘事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      相关资源
      最近更新 更多