Java 滚动时JScrollPane是否不重新绘制画布?

Java 滚动时JScrollPane是否不重新绘制画布?,java,canvas,jscrollpane,Java,Canvas,Jscrollpane,我试图制作一个游戏,在这个游戏中,我向JScrollPane添加了一个画布,但是画布比JScrollPane的可见区域大。因此,当我滚动JScLangPad以查看其余部分时,我只看到空白区域,即使我的画布被连续重画。任何人都可以帮助我???Swing组件不能与Canvas等重量级AWT组件一起工作。使用JComponent或JPanel而不是CanvasSwing组件不适用于像Canvas这样的重量级AWT组件。使用JComponent或JPanel代替画布您需要使用轻量级JPanel和两个重量

我试图制作一个游戏,在这个游戏中,我向JScrollPane添加了一个画布,但是画布比JScrollPane的可见区域大。因此,当我滚动JScLangPad以查看其余部分时,我只看到空白区域,即使我的画布被连续重画。任何人都可以帮助我???

Swing组件不能与Canvas等重量级AWT组件一起工作。使用JComponent或JPanel而不是Canvas

Swing组件不适用于像Canvas这样的重量级AWT组件。使用JComponent或JPanel代替画布

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

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

您需要使用轻量级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);
}

这是常见的JScrollPane问题。要执行此操作,请在JScrollPane上调用以下方法:

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

这是常见的JScrollPane问题。要执行此操作,请在JScrollPane上调用以下方法:

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

因此,没有办法使用Canvas和JScrollPane?也没有办法使用Canvas和JScrollPane?如果您确实需要使用Canvas(例如,如果您将绘制调用委托给本机方法),则使用ScrollPane而不是JScrollPane。如果您确实需要使用Canvas(例如,如果您将绘制调用委托给本机方法),然后使用ScrollPane而不是JScrollPane。