제 질문은 JFrame에서 직접 비교 한 것보다 JPanel에서 드로잉 할 때 거의 동일한 스윙 맞춤형 페인팅 루틴이 약 16 배 더 빠릅니까? 그냥 이중 버퍼링인가요? 틀림없이 그럴 수 있니?JPanel보다 JFrame에서 그리는 속도가 왜 느리지?
배경 : JFrame이 손상되지 않았을 때 (특히 부분적으로 만 보이지 않는 경우) 사용자 정의 그림이 새로 고쳐지지 않는 문제가있었습니다. 검색 후, JPanel의 하위 클래스를 bluddy-NetBeans-form-designer 형식으로 연결하는 방법을 결정하기로 결심했습니다.
동일한 상황에있는 사람들에게 : NetBeans에서는 JPanel을 확장하는 새로운 표준 클래스 (JPanel 형식이 아님)를 만들고 수동으로 모든 항목을 직접 코딩해야합니다 (GUI 디자이너가 없어도, 에일 - 일, 한숨). 그런 다음 표준 JPanel을 양식에 추가하고 크기를 설정합니다. 마우스 오른쪽 버튼을 클릭하고 "코드 사용자 정의"를 선택하고 콤보 상자에서 "사용자 정의 작성"을 선택하십시오. 새 javax.swing.JPanel을 작성하여 서브 클래스를 대체하십시오.
그래서 ... "제대로 할"수 있고 양식에 직접적으로 구성 요소를 칠하는 것이 가능했습니다. 또한 패널 - 키 리스너는 프레임 키 이벤트 디스패처를 고킹하는 것보다 훨씬 깔끔한 솔루션을 제공합니다.
어쨌든 프로파일 러는 JPanel의 paintComponent()에서 appotated JFrame의 paint()처럼 정확히 동일한 맞춤형 페인팅 코드가 거의 16 번 실행된다고 말합니다. 그 이유를 설명해 줄 수 있는지 궁금합니다.
미리 감사드립니다. 키이스.
편집 :이 질문을 잘못 해석 메트릭을 기반으로합니다. 프로파일 러는 AWT-EventQueue 스레드에서 JPanel의 paintComponent() 메소드를 포함 /보고하지 않습니다. 여기서 기본 프로파일에는 JFrame의 paint()가 포함되어 있습니다. 어리석은 질문을하기 전에 나는 더 조심스럽게보아야했다. 내 잘못이야.
Profiler VisualVM iirc는 어떤 메소드가 더 많은 시간을 들여야하는지 알려줍니다. 그것은 무슨 일이 일어나고 있는지를 알기위한 좋은 출발이 될 것입니다. –
@JonathanDrapeau : 네 말이 맞아! 프로필은 "AWT-Event-Queue"스레드의 일부로 paintComponent를보고하지 않습니다 (반면 JFrame 페인트는). 따라서 두 솔루션이 어떻게보고되는지는 차이가 있습니다. 내 잘못이야! – corlettk
AWT 구성 요소를 테스트하는 것이 자손 Swing JComponents와 같이 더 빨라졌지만 (선입 선출원에 대한 이야기는 이미 있었으므로), 선사 시대에 대해 이미 이야기했기 때문에 이것은 매우 구체적인 질문입니다. 그래픽 코어, 속도가 최적화 될 수있는 곳이 없습니다. Nimbus에서 사용 된 새로운 그래픽 코어 및 JavaFX – mKorbel