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