2012-03-26 3 views
1

JScrollPane에 캔버스를 추가하지만 캔버스가 JScrollPane의 보이는 영역보다 큰 게임을 만들려고합니다. 그래서 JScrollPane을 스크롤하여 나머지를 보았을 때 캔버스가 계속 그려지더라도 빈 영역 만 볼 수 있습니다. 아무도 나를 도울 수 있습니까 ??JScrollPane은 스크롤 할 때 Canvas를 다시 그리지 않습니까?

+0

당신은 확실히 (네이티브 메소드의 페인트 호출을 위임하는 경우, 예를 들어), 다음 대신 JScrollPane의의의 ScrollPane을 사용하여 캔버스를 사용해야하는 경우. – Mischa

답변

2

Swing 구성 요소는 Canvas와 같은 중량이 큰 AWT 구성 요소에서는 작동하지 않습니다. JComponent에 나 대신 캔버스

+0

Canvas 및 JScrollPane을 사용할 방법이 없습니까? –

0

의 인 JPanel를 사용하여 당신이 좋아하는 경량 인 JPanel 2 헤비급 개체를 사용할 필요가 : AWT 또는 SWT (OLE 포함), 또는 혼합 수 있습니다

JPanel foreground = new JPanel(); 
Panel frame = new Panel(); 
Cavas canvas = new Cavas(); 
foreground.add(frame); 
frame.add(canvas); 

헤비급 개체를 그것은 중요하지 않습니다.

그때가 JScrollPane를 얻을 수와 같은 메소드를 호출있는 AdjustmentListener 추가 : 그것은 일반적인 JScrollPane의 문제가

private void updateLocation() { 
    final JScrollPane scroll = getScrollPane(); 
    if (null == scroll) { 
     // do nothing 
     return; 
    } 
    final Point top = getLocation(); 
    final Rectangle visible = getVisibleRect(); 

    // set up new location 
    frame.setSize(visible.width, visible.height); 
    frame.setLocation(visible.x - top.x, visible.y - top.y); 
    canvas.setSize(getWidth(), getHeight()); 
    canvas.setLocation(top.x - visible.x, top.y - visible.y); 
} 
8

합니다. fix this with minimum fuss하려면 JScrollPane의에서 다음과 같은 방법을 호출

scrollpane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE); 
+0

언급 해 주셔서 감사합니다. –

관련 문제