페인트 프로그램을 만들고 있는데 텍스트 도구를 만드는 방법을 알아 내는데 어려움을 겪고 있습니다. 캔버스에 텍스트 상자를 표시하려면 클릭하고 드래그하면됩니다. 문제는 이것이 내 캔버스 구성 요소 위에 떠있는 JTextComponent가되는 것을 원하지 않는다는 것입니다. 그래서 마우스를 움직일 때 테두리가 깜박이고 내 마우스가 텍스트 상자 바로 아래에있을 때 커서가 텍스트 상자 아래에있는 것처럼 보이는 문제가 발생합니다.오프 스크린 JTextComponent
JTextArea를 만든 다음 mouseEvents를 실행하는 것은 캔버스의 텍스트 상자를 기준으로 마우스 위치를 기반으로합니다. 캔버스에있는 것은 실제 컴포넌트를 추가하지 않은 실제 JTextArea의 페인트 표현 (.getGraphics() 사용) 일뿐입니다. 이 문제는 구성 요소가 화면에 표시되지 않는 한 .getGraphics()를 호출 할 수 없다는 것입니다.
전체적으로 JTextComponent 코드를 단순하게 만들어야하는 것처럼 재현하는 것을 피하려고합니다.
누구든지이 문제에 대한 해결책이나 다른 아이디어가 있습니까?
문제는 getText를 사용하면 깜박 거리는 당근과 같은 JTextComponent의 모든 부분을 복사하지 않는다는 것입니다. 그 때문에 getGraphics가 필요합니다. 구성 요소가 실제로 표시되지 않는 한 사용할 수 없습니다. – pigi5
Can 및 isFocused(); 포커스가있는 경우 setCaretPosition()을 사용할 수 있습니다. 그런 식으로 사용자가 테스트를 편집하고 싶을 때만 캐럿이 생깁니다 ... 여러 텍스트 영역을 원한다면 스레드를 사용할 수 있습니다 ... 그리고 포커스가 맞지 않을 때까지 기다려야합니다. – ItamarG3
setCaretPosition()은 JTextComponents 용입니다. 난 수동으로하지 않고 graphics.drawString()와 함께 내 화면에 캐럿을 그릴 수 없을 것입니다. 그때까지는 JTextArea의 Java 코드를 내 프로그램에 복사하고 거기에서 변경하는 것이 쉬울 것입니다. – pigi5