我试图创建一个游戏,我将一个Canvas添加到JScrollPane,但画布大于JScrollPane的可见区域 . 因此,当我滚动JScrollPane以查看其余部分时,我只看到空白区域,即使我的Canvas不断重绘 . 有谁可以帮帮我?
您需要使用轻量级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); }
Swing组件不适用于像Canvas这样的重量级AWT组件 . 使用JComponent或JPanel而不是Canvas
这是常见的JScrollPane问题 . 要fix this with minimum fuss,请在JScrollPane上调用以下方法:
scrollpane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
3 回答
您需要使用轻量级JPanel和2个重量级对象,例如:
重量级对象可能是AWT,或SWT(带有OLE),或混合,无关紧要 .
然后获取JScrollPane并添加AdjustmentListener,调用方法如:
Swing组件不适用于像Canvas这样的重量级AWT组件 . 使用JComponent或JPanel而不是Canvas
这是常见的JScrollPane问题 . 要fix this with minimum fuss,请在JScrollPane上调用以下方法: