2014-04-13 11 views
1

페인트 프로그램을 만들고 있는데 텍스트 도구를 만드는 방법을 알아 내는데 어려움을 겪고 있습니다. 캔버스에 텍스트 상자를 표시하려면 클릭하고 드래그하면됩니다. 문제는 이것이 내 캔버스 구성 요소 위에 떠있는 JTextComponent가되는 것을 원하지 않는다는 것입니다. 그래서 마우스를 움직일 때 테두리가 깜박이고 내 마우스가 텍스트 상자 바로 아래에있을 때 커서가 텍스트 상자 아래에있는 것처럼 보이는 문제가 발생합니다.오프 스크린 JTextComponent

JTextArea를 만든 다음 mouseEvents를 실행하는 것은 캔버스의 텍스트 상자를 기준으로 마우스 위치를 기반으로합니다. 캔버스에있는 것은 실제 컴포넌트를 추가하지 않은 실제 JTextArea의 페인트 표현 (.getGraphics() 사용) 일뿐입니다. 이 문제는 구성 요소가 화면에 표시되지 않는 한 .getGraphics()를 호출 할 수 없다는 것입니다.

전체적으로 JTextComponent 코드를 단순하게 만들어야하는 것처럼 재현하는 것을 피하려고합니다.

누구든지이 문제에 대한 해결책이나 다른 아이디어가 있습니까?

답변

0

JTabbedPane을 만들 수 있습니다. 페인트 패널 용 탭과 textPane 용 탭. 그리고 당신은 어떤 버튼에 리스너를 줄 수 있습니다. actionlistener는 paint 메소드의 그래픽에 Graphics.drawString (...)을 부여해야합니다. 문자열은 textComponent가 준 것이다. 페인트 프로그램에서 문자열을 움직이는 것이 더 어렵지 만 마우스 끌기를 식별하는 mouseListener를 가질 수 있습니다.이 끌기는 Graphics.drawString (...)의 새 (x, y) 지점을 설정합니다.

희망이 조금 도움이되었습니다.

+0

문제는 getText를 사용하면 깜박 거리는 당근과 같은 JTextComponent의 모든 부분을 복사하지 않는다는 것입니다. 그 때문에 getGraphics가 필요합니다. 구성 요소가 실제로 표시되지 않는 한 사용할 수 없습니다. – pigi5

+0

Can 및 isFocused(); 포커스가있는 경우 setCaretPosition()을 사용할 수 있습니다. 그런 식으로 사용자가 테스트를 편집하고 싶을 때만 캐럿이 생깁니다 ... 여러 텍스트 영역을 원한다면 스레드를 사용할 수 있습니다 ... 그리고 포커스가 맞지 않을 때까지 기다려야합니다. – ItamarG3

+0

setCaretPosition()은 JTextComponents 용입니다. 난 수동으로하지 않고 graphics.drawString()와 함께 내 화면에 캐럿을 그릴 수 없을 것입니다. 그때까지는 JTextArea의 Java 코드를 내 프로그램에 복사하고 거기에서 변경하는 것이 쉬울 것입니다. – pigi5