2012-11-02 4 views
0

저는 스크린 샷을 다루는 작은 자바 응용 프로그램을 만들고 있습니다. 이미지를 보유하고있는 ScreenshotPanel이라는 JPanel에서 상속 한 사용자 정의 클래스가 있으며이 클래스는 JScrollPane 내부에 있습니다. 프레임의 크기가 변경되면 ScrollPane이 이동하고 크기가 조정됩니다. 확대/축소 부분을 제외한 모든 부분이 잘 작동하지만 ScrollPane 내부의 screenshotPanel 크기를 조정할 수 있기를 원하지만 screenshotPanel의 크기가 조정되지 않고 잠시 동안 오른쪽 크기로 깜박이지 만 다시 크기가 조정됩니다. ScrollPane 크기입니다.JScrollPane과 그 내용의 크기를 적절히 조절합니다.

ScrollPane을 사용하지 않고 screenshotPanel을 사용하면 제대로 작동하지만 스크롤러가 자동으로 추가되어 확대 된 이미지를 볼 수 있습니다. ,

double AR=((double)screenshotPanel.getImage().getHeight())/screenshotPanel.getImage().getWidth(); 

    screenshotPanel.setSize((int)((getWidth()-180)*zoomFactor), (int)((AR*(getWidth()-180)-100)*zoomFactor)); 
    scrollPane.setSize(getWidth()-180, (int)(AR*(getWidth()-180))-100); 

-180 -100 버튼 및 줌 제어 componenets (모든 이동과 완벽하게 크기를 조정하는)의 공간을 유지하는 데 사용됩니다

는 여기에 크기를 조정하는 데 사용하는 코드의 일부이다 zoomFactor는 확대 할 양을 유지하는 이중입니다.

ScrollPane을 사용하지 않고 ScreenshotPanel의 크기를 다시 조정하려면 어떻게해야합니까?

+0

깜빡 거림이 JViewport의 또는 JScrollBars 또는 테두리 또는 다른 ???에서 발생), 모든 만 촬영이있을 것 SSCCE가없는 어둠 – mKorbel

+0

질문이 있으시면 JLabel에서 ImageIcon을 사용 하시거나 BuferrefedImage 또는 scaledInstance (단순히 비동기식) – mKorbel

+0

을 사용하셨습니까? 제가 언급 했어야 할 것이 있습니다. screenshotPanel의 이미지에 BufferedImage를 사용하고 있습니다. – Bob

답변

1

크기 변경을 보정하기 위해 페인트 방법에 코드가 없으면 구성 요소의 크기를 변경하면 이미지의 크기가 조정되지 않습니다.

JViewPort은 구성 요소의 기본 크기를 따르므로 크기를 변경하면이 깜박임이 적용되고 뷰포트가 재설정됩니다.

패널에 scale 메서드를 추가하고 getPreferredSize 메서드를 재정의하십시오.

setScale으로 전화하면 새로운 크기 조정 크기를 계산하십시오. getPreferredSize 메서드가이 값을 반환하는지 확인하십시오.

변경 내용이 컨테이너 계층 구조를 통해 업데이트되었는지 확인하려면 invalidate 및 가능하면 repaint으로 전화해야합니다.

, 당신이 취할 책임있는 창은 그 자체의 이미지 크기를 조정하지 않습니다, 기억,

관련 문제