滚动时JScrollPane不重绘Canvas?

时间:2012-03-26 13:01:01

标签: java canvas jscrollpane

我尝试制作一个游戏,我将Canvas添加到JScrollPane,但画布大于JScrollPane的可见区域。因此,当我滚动JScrollPane以查看其余部分时,即使我的Canvas不断重绘,我也只能看到空白区域。任何人都可以帮助我??

3 个答案:

答案 0 :(得分:9)

这是常见的JScrollPane问题。要fix this with minimum fuss,请在JScrollPane上调用以下方法:

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

答案 1 :(得分:2)

Swing组件不适用于像Canvas这样的重量级AWT组件。使用JComponent或JPanel而不是Canvas

答案 2 :(得分:0)

您需要使用轻量级JPanel和2个重量级对象,例如:

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

重量级对象可能是AWT,或SWT(使用OLE),或混合,无关紧要。

然后获取JScrollPane并添加AdjustmentListener,调用方法如:

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);
}