Enfoque problemas com o JDK7 e componentes nativos

Nós temos um aplicativo swing que incorpora um componente IE ocx via JNIWrapper.

Depois de mudar de jdk6 para jdk7, começamos a notar problemas de foco. Quando o IE incorporado mostra uma página da Web com campos de texto (por exemplo, a página de pesquisa do Google) que o problema é iniciado:

O Browser 'captura' o foco, para que você possa começar a digitar no campo de texto de busca. Cada chave digitada vai para o IE ocx. Mas swing parece ignorar essa mudança de foco. Mesmo se eu mudar o foco para um campo de texto swing (e swing mostra o cursor de entrada piscando), todas as chaves digitadas vão para o IE ocx

A única maneira de "consertar" o foco é desativar e ativar o quadro principal. depois disso, o foco parece ser consistente. Mas se eu clicar no campo de texto da pesquisa do Google novamente, o foco será quebrado novamente.

Parece que há uma grande mudança no foco de manipulação no jdk7. Deligação:

Na plataforma Windows, um conceito de “foco sintético” foi implementado. Isso significa que um componente de proprietário de foco apenas emula seu estado de foco, enquanto o foco nativo real é definido como um componente de "proxy de foco". Esse componente recebe mensagens nativas de chave e método de entrada e as despacha para um proprietário de foco. Antes do JDK7, um componente proxy de foco era um componente filho oculto dedicado dentro de um quadro / diálogo. No JDK7, um quadro / diálogo serve como um proxy de foco. Agora, os proxies se concentram não apenas em componentes em uma janela de propriedade, mas também em todos os componentes filhos. Uma janela simples nunca recebe foco nativo e depende do proxy de foco de seu proprietário. Esse mecanismo é transparente para um usuário, mas deve ser levado em conta durante a depuração.

Alguém tem uma ideia para "consertar" o comportamento?

EDITAR: Aqui algum código para reproduzir o problema comJxBrowser

<code>    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");
}
</code>

questionAnswers(4)

yourAnswerToTheQuestion