使用JScrollPane和JPanel(自定义)滚动某个矩形的简单方法

时间:2014-05-14 19:18:34

标签: java swing scroll jpanel jscrollpane

我创建了一个名为 ImagePanel 的自定义JPanel类。我重写了paintComponent方法,就像这样...

public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    g.drawImage(image, 0,0, null);

}

自定义面板的目的是简单地绘制图像。

在我的JFrame中,我创建了一个添加到JFrame的ScollPane。当我创建ScrollPane时,我传入了我的imagePanel的实例,就像这样......

ip = new ImagePanel();
JScrollPane jsp = new JScrollPane(ip);
this.add(jsp);

现在我只想用一种简单易用的方式使用滚动条滚动我的图像。现在图像非常大,滚动条不会出现。我使用该策略使它们可见,但滚动条的句柄不存在。

有谁知道一个简单的方法吗?

1 个答案:

答案 0 :(得分:1)

尝试JPanel#setPreferredSize(),如果需要,会强制JScrollPane显示滚动条。

public void paintComponent(Graphics g)
{
   super.paintComponent(g);
   g.drawImage(image, 0,0, null);
   // set the size of the panel based on image size
   setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
}

修改

在被覆盖的setPreferredSize()内设置paintComponent()不是一个好方法。

您可以按照JLabel的建议,使用@mKorbel 以更简单的方式执行此操作。有关详细信息,请查看以下评论​​。

BufferedImage image = ...
JLabel label = new JLabel(new ImageIcon(image)); // set the icon

JScrollPane jsp = new JScrollPane(label);

截图:

enter image description here