使用java更改焦点窗口

Posted

技术标签:

【中文标题】使用java更改焦点窗口【英文标题】:Changing focused window using java 【发布时间】:2016-08-04 09:46:04 【问题描述】:

我目前正在使用 java 编写虚拟键盘。如您所知,当用户单击我的虚拟键盘上的按钮时,文本将出现在其他一些窗口中(比如 word 文档)。那么我该如何做这个动作呢?或者更清楚一点,当用户单击按钮并让文本出现在 word 文档中时,如何更改焦点窗口? 谢谢!

【问题讨论】:

【参考方案1】:

我希望下面的例子能帮助你开发键盘。几点: 1. 使用JWindow 而不是JFrame 或任何其他框架,以避免您的对焦问题。 2. 使用Robot将按键事件传递给活动光标。

运行下面的应用程序,并确保您的光标在文本板上,按窗口上的 A 按钮,字符 a 插入到光标位置:

import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JWindow;

public class Runningwindow extends JWindow

  public static void main(String[] args) throws AWTException
  
    Runningwindow window = new Runningwindow();
    window.setBackground(Color.RED);
    window.setPreferredSize(new Dimension(200, 200));
    window.setLayout(new FlowLayout());
    JButton button = new JButton("A");
    Robot r = new Robot();
    int keyCode = KeyEvent.VK_A; // the A key
    button.addMouseListener(new MouseAdapter() 

      public void mouseReleased(MouseEvent e)
      
        r.keyRelease(keyCode);
      

      public void mousePressed(MouseEvent e)
      
        r.keyPress(keyCode);
      
    );
    window.add(button);
    window.pack();
    window.setVisible(true);
  

【讨论】:

以上是关于使用java更改焦点窗口的主要内容,如果未能解决你的问题,请参考以下文章

Qt在窗口之间传递焦点

MFC:将焦点设置到子窗口时如何防止应用程序成为前台窗口

Windows/C++:检测窗口之间焦点何时改变(全局)

独立的 Windows 应用程序在焦点更改时挂起

活动窗口更改时收到通知

Java Swing如何让JFrame获得焦点