【发布时间】:2012-09-14 20:33:42
【问题描述】:
我正在制作一个实用程序来为我的游戏在地图中定义立足点,并且我正在 JScrollPane 内的 JPanel 内显示地图的预览。当地图大于 JScrollPane 时,我希望能够滚动。我该怎么做?
这是一张照片
地图的图像适合滚动窗格,但图像实际上更大,所以我们看不到整个地图。
一些代码:
在滚动窗格中保存图像的 JPanel 类
public class MapDisplay extends JPanel {
public MapDisplay() {
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponents(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(new Color(0xDFDFDF));
g2d.fillRect(0, 0, 2000, 2000);
if (mapinfo != null) {
if (mapinfo.img != null) {
g2d.drawImage(mapinfo.img, 0, 0, null);
}
}
repaint();
}
}
scrollPane 的声明
final JScrollPane scrollPane_1 = new JScrollPane(mapDisplay);
scrollPane_1.setBounds(10, 11, 989, 553);
getContentPane().add(scrollPane_1);
add(scrollPane_1);
【问题讨论】:
-
"How should i do that?"-- 通过正确编码。尽管没有代码,但很难知道自己做错了什么。也许您正在尝试设置由 JScrollPane 保存并显示图片的组件的大小?也许您没有将 JScrollPane 添加到 GUI 中?在这里很难猜。 -
我要添加一些代码,请稍等。
-
试试这个
ImageApp。 -
您对
setBounds(...)的调用让我担心,并暗示您可能没有使用布局管理器,这是一件危险的事情,很可能是您的问题的根源。我建议您使用使用适当布局管理器的嵌套容器,我敢打赌,如果不能解决您的问题,这将极大地帮助您。另外,不要在绘图方法中调用repaint(),因为这是一件非常糟糕的事情。 -
@NicolasMartel:但这会损害您的 GUI 滚动能力。您最好使用布局管理器,因为它们会为您完成布局工作,这使得 GUI 修改变得更加容易,并使您的 GUI 在任何操作系统/平台中看起来都很好。
标签: java swing jpanel jscrollpane absolutelayout