2014-06-19 1 views
0

나는 멀티 터치 4 자바를 확장 한 터치 라이브러리와 tuio 클라이언트 - 서버 설정을 사용하여 터치 기반 윈도우 7 앱을 개발 중입니다. 내가 고민하는 기능 중 하나는 터치를 사용할 때 텍스트 강조를 사용하는 것입니다. JTextPane을 사용하여 텍스트를 표시하는 간단한 txt 파일을 표시합니다. 강조 표시는 드래그 조치를 통해 수행됩니다. 드래그 이벤트가 시작된 위치를 클릭 한 다음 중지하고 텍스트 패널의 공간으로 변환하려고 시도했지만 실제로는 실제 텍스트 앞에 있어야하는 것과 다른 값을 갖습니다. 나는이 문서를 표시하기 위해 사용하고터치 인터페이스가있는 JtextPane

코드는 다음과 같다 : JDialog의 부모가 내 응용 프로그램에 사용되는 메인 디스플레이 구성 요소입니다

  //Create the JDialog that is the container of it 
      window = new JDialog(parent); 
      window.setUndecorated(true); 

      //Create the JTextPane 
      text = new JTextPane(); 
      text.setPage(newFile.toURI().toURL()); 
      text.setEditable(false); 
      text.setHighlighter(null); 

      //ScrollPane that will be used to display the text 
      JScrollPane scroll = new JScrollPane(text); 
      scroll.setPreferredSize(new Dimension(500, 700)); 

      window.getContentPane().add(scroll, BorderLayout.CENTER); 

      window.pack(); 
      window.setVisible(true); 
      window.validate(); 

.

@Override 
public boolean processGestureEvent(GestureEvent ge) { 
    if((ge instanceof DragEvent) && this.component.isHighlight()) 
    { 
     tapCount=0; 
     if(this.component.isHighlight()) 
     { 
      //do highlighting 
      DragEvent drag = (DragEvent) ge; 
      switch (drag.getId()) { 
      case GestureEvent.GESTURE_STARTED: 
       Point start = drag.getFrom(); 
       Point calcStart = new Point(start.x - compPosition.x, start.y - compPosition.y); 
       startPos = this.textDisplay.viewToModel(calcStart); 

       break; 

      case GestureEvent.GESTURE_ENDED: 
       Point end = drag.getTo(); 
       Point calcEnd = new Point(end.x - compPosition.x, end.y - compPosition.y); 
       endPos = this.textDisplay.viewToModel(calcEnd); 

       System.out.println("I have this positions:" + startPos + "/" + endPos); 
       System.out.println("Should have " + this.textDisplay.getSelectionStart() + "/" + this.textDisplay.getSelectionEnd()); 
       System.out.println("And the text is: " + this.textDisplay.getText().substring(startPos, endPos)); 
       break; 
      case GestureEvent.GESTURE_CANCELED: 
       startPos = 0; 
       endPos = 0; 
       break; 
      } 
     } 
     return true; 
    } 

하는 compPosition 텍스트 창을 보유되는 JDialog의 위치입니다 다음과 같이

드래그가 처리됩니다. 나는 마우스로 터치를 시뮬레이트하고 있으므로 마우스로 텍스트 창에 내장 된 강조 표시 기능에서 강조 표시를위한 올바른 텍스트 위치를 얻고 있습니다.

변환을 왜곡하는 JDialog 및 JScroll 창 때문에 문제가 있습니까? 터치로 얻은 점의 좌표계는 화면 왼쪽 위 모서리의 원점이며 텍스트 창의 좌표계 원점은 같은 위의 왼쪽 위 모서리에 있습니다.

어떻게 문제를 해결할 수 있습니까? 모든 제안을 부탁드립니다.

LE : 구성 요소를 초기화 할 때 제스처 프로세서를 추가하는 데 문제가 있었는데 그 위치는 (0,0)이었고 이후에만 원하는 위치로 이동했습니다.

Point calcStart = new Point(start.x - this.component.getLocation().x, start.y -this.component.getLocation().y); 

대신 실제 구성 요소에 대한 참조를 전달하고 필요할 때 위치를 얻고 다음과 같이

는 I는 위치 계산을 바꿨다.

답변

0

내가 어떻게 거 끝을 궁금해

Point calcStart = new Point(start.x, start.y); 

를 사용하는 대신

Point calcStart = new Point(start.x - compPosition.x, start.y - compPosition.y); 

의 시도, 그래서 우리에게 내가 그 시도는

+0

을 무엇을 얻을 어떤 가치를 부여하고 이상하게 IT는 준 같은 결과 ... 그래서 어떻게 든 위치를 (0,0)으로 설정했다는 것을 짐작할 수 있습니다. 컴포넌트를 생성 할 때 제스처 프로세서를 초기화 할 때 의미가있을 수도 있고, 0,0 인 초기 위치 일 때만 이동합니다. 그것까지 나는 그것을 원해. 이제 구성 요소에 대한 참조를 제스처 프로세서에 전달하고 필요할 때 위치를 찾습니다. point calcStart = new Point (start.x - this.component.getLocation(). x, start.y - this.component. getLocation(). y); 이것은 분명히 지금까지 작동합니다. 도와 주셔서 감사합니다 :) – redspider