2014-09-01 6 views
0

간단한 질문처럼 보였지만 오랜 시간 주제를 연구 한 후에도 여전히 이에 대한 답을 찾을 수 없습니다. 자바를 사용하여 캐럿 (텍스트 커서) 위치 옆에 작은 툴팁을 표시하고 싶습니다. 모든 애플리케이션 내부에서 캐럿 위치를 지정해야합니다. 즉, Word, 메모장, Chrome 브라우저를 열고 입력을 시작하면 커서의 X & Y를 볼 필요가 있습니다. Java를 사용하여이 작업을 수행 할 수있는 방법은 무엇입니까? CodeProject의 C#에서 구현을 보았지만 java에서이 작업을 수행해야합니다.Java를 사용하는 모든 애플리케이션에서 캐럿 위치를 얻는 방법은 무엇입니까?

+1

네이티브 레벨에서 이걸 가능하다고 확신하지 못합니다. (분명히 자바에서 온 것은 아니지만, JNA/JNI 통합이 필요합니다) – MadProgrammer

+0

좋아, 분명히 창문 아래에서 ... [GUITHREADINFO ] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms632604 (v = vs.85) .aspx) – MadProgrammer

+0

그리고 C#에서 변환하는 데 신경 쓰지 않는다면 [ 이 예제] (http://www.codeproject.com/Articles/34520/Getting-Caret-Position-Inside-Any-Application) – MadProgrammer

답변

-1

는 기본적으로 .getMagicCaretPosition() 함수를 사용

import java.awt.Dimension; 
import java.awt.Point; 

import javax.swing.*; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 
import javax.swing.text.Caret; 
public class CaretPos implements Runnable 
{ 
    JFrame frame; 
    JPanel panel; 
    JTextPane tPane; 
    Caret newCaret; 
    Point point; 

    @Override 
    public void run() { 
     frame = new JFrame("CaretPos"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     panel = new JPanel(); 
     tPane = new JTextPane(); 
     newCaret = tPane.getCaret(); // you probably dont need to create another 
            // Caret, but i did anyway to add the listener 
     newCaret.addChangeListener(new ChangeListener() { 

      @Override 
      public void stateChanged(ChangeEvent e) { 
       point = newCaret.getMagicCaretPosition(); 
       System.out.println(point); 
      } 
     }); 
     tPane.setCaret(newCaret); 
     tPane.setPreferredSize(new Dimension(500,500)); 
     panel.add(tPane); 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     CaretPos run = new CaretPos(); 
     SwingUtilities.invokeLater(run); 
    } 

} 

나는 JTextPane가 사용을하지만, 확실히 다른 스윙 구성 요소가

편집을 사용할 수있는 메신저 : 나는 완전히 질문을 오해 죄송합니다. 나는 당신이 어떤 프로그램 에든 caret 포지션을 찾고 싶다고 생각했습니다. 내 잘못이야.