2016-11-18 25 views
0

私は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を使うことはできません。キーボードからの変更/追加データをキーボードから送信する必要があります。もう一度コードを入力してください)

答えて

0

私は方法を非常に見つけようとしました。しかし、それは純粋なJavaではネイティブコードなしでは不可能と思われます。

関連する問題