私はWindowsとMacOS用のオンスクリーンキーボードで作業しています。私は少しのテストアプリを作っています。これは、単一のボタンを持っており、アクティブなアプリケーションに文字 "M"を入力します。 Windows 10では動作しますが、Macでは動作しません(私はmacOS 10.12を使用しています)。 macOSでは、ボタンを押すとすぐに、私の単一のボタン "keyboard"がsetFocusable(false)を全部持っていても、 "M"にフォーカスを失うようにしようとしているアプリケーション(テキスト入力のカーソルは消えます)場所。私は自分のMouseListenerをボタンにも試しました。Mac用Java仮想キーボード
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class main {
private static Robot robot;
private static Rectangle rectangle;
public static void main(String[] args){
try {
robot = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
Button button = new Button("M");
button.setFocusable(false);
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(100, 100);
frame.add(button);
frame.setAlwaysOnTop(true);
//set everything I can think of to unfocusable!!!
frame.setFocusable(false);
frame.setAutoRequestFocus(false);
frame.setFocusableWindowState(false);
frame.getRootPane().setFocusable(false);
frame.setVisible(true);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sendKeystroke();
}
});
//Instead of adding a listener to the button, I've also tried my own MouseListener.
/* button.addMouseListener(new MouseTrap());
rectangle = button.getBounds();*/
}
private static void sendKeystroke(){
robot.keyPress(KeyEvent.VK_M);
robot.keyRelease(KeyEvent.VK_M);
}
private static class MouseTrap extends MouseAdapter{
@Override
public void mouseClicked(MouseEvent e) {
if (rectangle.contains(e.getPoint())){
sendKeystroke();
}
}
}
}
MacOSのようにいくつかのアプリがカーソルを別のものから取り込まずにフォーカスを当てているようです。例えばシステムトレイからVMwareまたはスポットライト検索。
Cursor for VMware and IntelliJ at the same time
私は非Javaいる他の回答を見てきました:
Virtual Keyboard Cocoa & Objective C
をしかし、私は本当にJavaはWindows上で動作するとき、すべてのネイティブを行かなければならないのですか?学習曲線(Macではネイティブではない)とは別に、私はWinとMacのバージョンをできるだけ近くにしたいと思っています。
私はこれを直進Javaを使用してどのように動作させることができるか知っていますか?
(注:上記のリンクの質問者の場合と同じように、私はkeyboardviewを使うことはできません。キーボードからの変更/追加データをキーボードから送信する必要があります。もう一度コードを入力してください)