2009-02-09 5 views
7

진행하기 전에 JavaFX 응용 프로그램을 다시 칠하도록 할 수있는 방법이 있습니까? 스윙 패널의 페인트 (그래픽 g) 방법과 비슷합니다 (키워드가 잘못되었을 수도 있습니다).JavaFX에서 즉시 페인트 강제 적용

다음 예제를 참조하십시오. 컴퓨터 플레이어에 필요한 AI와 함께 TicTacToe 응용 프로그램을 작성합니다. 당신은 듀크 컴퓨터 플레이어를 보여줄 수있는 능력을 원합니다. 어쩌면 당신은 컴퓨터를 돌리는 사이에 2 초의 일시 정지를 넣어서 인생과 비슷한 효과를 줄 수 있습니다. '이동'버튼을 누르면 반응이 크게 멈추고 (컴퓨터가 '결정'하기 위해 가짜 일시 중지로 9 회전하는 데 걸리는 시간) 갑자기 앱 시각이 완료된 상태로 업데이트됩니다. 게임의 상태.

일단 응용 프로그램의 스레드에서 처리가 완료되면 JavaFX가 다시 표시되는 것처럼 보입니까? 나는 여기서 확실하지 않다.

감사합니다.

+0

Swing과 JavaFX는 GUI 구성 요소에서 비슷한 스레딩 모델을 가지고 있다고 생각합니다. Swing의 JPanel, JavaFx Button은 메인 스레드에서만 업데이트해야합니다. 위의 예제에서 계산을 수행하는 별도의 스레드 (예 : 이동)를 작성한 다음 Swing.invokeLater 또는 Platform.runLater()를 호출하여 주 스레드에서 GUI를 업데이트하십시오. 이상하게 들릴지 모르지만, 어떤 스레드가 GUI를 업데이트 할 수있게되면 발생하는 문제를 우회하는 방법으로이 방법을 사용합니다. – Kerry

답변

6

당신 말이 맞습니다. JavaFX는 이벤트 기반 및 단일 스레드입니다. 다시 그리기와 이벤트 응답을 동시에 수행 할 수 없음을 의미합니다. 장기 실행 작업은 별도의 스레드에서 실행되어 UI의 렌더링을 차단하지 않도록해야합니다. 작업이 끝나면 FX.deferAction()을 호출하여 FX 스레드와 다시 동기화 할 수 있습니다.이 스레드는 주 코드에서 코드를 실행하기 만합니다. 실.

1

내가 반나절 동안 JavaFX를 가지고 놀았지만 Timelines, Keyframes 및 바인딩을 사용하여 명시 적으로 호출하는 대신 repaints를 사용하지 않는 것이 가장 도움이 될 것입니다. 설명 했습니까?

this tutorial for an example을 참조하십시오.

1

JavaFX의 모델은 화면에서 "물건"의 그림에서 당신을 분리하는 것입니다. 이것은 매우 강력하지만 익숙한 방법에서 변화입니다.

whaley는 정확합니다. JavaFX에서이를 수행하는 적절한 방법은 이동이 매 X 초마다 수행되고 해당 키 프레임에서 그려지는 타임 라인을 만드는 것입니다.

이 작업을 수행하는 방법에 대한 질문이있는 경우 시도해보고 일부 코드로 새로운 질문을 만드십시오.

관련 문제