关注JDK7和本机组件的问题

 2023-01-20    294  

问题描述

我们有一个摆动应用程序,该应用程序通过JNiWrapper嵌入IE OCX组件.

从JDK6切换到JDK7后,我们开始注意到焦点问题.当嵌入式IE显示带有文本字段(例如Google搜索页面)的网页时,麻烦开始了:

关注JDK7和本机组件的问题

浏览器”捕获”焦点,因此您可以开始在搜索文本字段中键入.输入的每个键都发送到IE OCX.但是摇摆似乎忽略了这种重点的变化.即使我将焦点更改为秋千文本字段(并且秋千显示闪烁的输入光标),所有键入的键都将转到IE OCX

“修复”重点的唯一方法是将主框架解脱和激活.之后,重点似乎是一致的.但是,如果我再次在Google搜索文本字段中单击,则重点又突破了.

似乎有很大的变化在JDK7中进行焦点处理.来自 link link : /p>

在Windows平台上,已经实现了”合成焦点”的概念.这意味着焦点所有者组件仅模拟其焦点状态,而真实的本机焦点设置为”焦点代理”组件.该组件接收密钥和输入方法本机消息并将其分配给焦点所有者.在JDK7之前,焦点代理组件是框架/对话框内的专用隐藏子组件.在JDK7中,帧/对话框本身是焦点代理.现在,它不仅要专注于拥有的窗口中的组件,还集中在所有儿童组件中.一个简单的窗口永远不会收到本地焦点,并且依赖于其所有者的焦点.这种机制对于用户是透明的,但在调试时应考虑.

任何人都有”解决”行为的想法?

编辑:在这里一些代码可以用 jxbrowser /p>

public static void main(String[] args) {
    Browser browser = BrowserFactory.createBrowser(BrowserType.IE);

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(browser.getComponent(), BorderLayout.CENTER);

    JPanel panel = new JPanel();
    frame.getContentPane().add(panel, BorderLayout.NORTH);

    textField = new JTextField();
    panel.add(textField);
    textField.setColumns(10);
    frame.setSize(700, 500);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

    browser.navigate("http://www.google.com");
}

推荐答案

所有 – 我们只是用另一个浏览器组件(DJProject Antial Swing)遇到了这个问题.在Java 1.6下,一切正常,但是在Java-7下,我们开始看到奇怪的问题,您可以在其中输入输入框,但是如果您选择后退以修复错字,则在单击鼠标后无法输入.要恢复,您必须选择输入字段,然后返回以继续您的编辑.

参见
特别是关于Sythentic Focus和Focus代理的部分.

无论如何,要缩短一个短篇小说 – 在我们的情况下,我能够通过将鼠标侦听器附加到jwebbrowser.getnativecomponent()来找到工作障碍.然后在MousePressed上执行浏览器.requestFocus(),然后是浏览器.

其他推荐答案

尝试查看 focuslistener and windowfocuslistener 实施摇摆组件本身或Jframe的听众.每当呼叫focusLost(..)>时,您都可以在窗口或组件上使用requestFocus()迫使焦点返回.

其他推荐答案

我终于找到了一个工作解决方法.在弄清是什么原因引起的时,注意到单击另一个组件(即jlabel)并在文本字段上单击”恢复正常”.因此,我使用AWT机器人类复制了该行为.在中查看更多详细信息.

以上所述是小编给大家介绍的关注JDK7和本机组件的问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26074.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。