Java ScrollPane显示内容但滚动消失

时间:2014-04-14 00:54:18

标签: java swing jscrollpane

我希望这个ImagePanel类显示一个非常高的图像,所以我把它放在JScrollPane中。有趣的是,当我将ImagePanel添加到JFrame时,它会显示图像,但滚动条不存在,并且无法滚动(也不能使用鼠标)

当我写它时,它扩展JFrame更容易过度,因为我需要它的程序中的部分需要一些时间才能到达,这个类有很多方法可以在图片上绘制。作为JFrame它按预期工作。

另一个问题是,我尝试了一些确保宽度足以显示图像的东西,但setSize(image.getWidth(), something)setPreferedSize都没有。我的情况是相关的我添加ImagePanel就像这样:

all.add(imagePanel, BorderLayout.CENTER);
all.add(contentbox, BorderLayout.EAST);

JFrame,所以它应该伸展,但由于某些原因不起作用。内容框包含ContentPanes,我没有停用LineWarp因此它应该为imagePanel留出空间(这不是我无法看到滚动条的原因,我试过了它在空JFrame上,两边都有空间^^)

public class ImagePanel extends JPanel {

    JLabel imageContainer;
    ImageIcon icon;
    BufferedImage image;
    JScrollPane scroll;
    Graphics g;

    public ImagePanel (String cName) {
        super();

        File cFile = new File(cName);
        try {
            this.image = ImageIO.read(cFile);
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        g = image.getGraphics();
        g.setColor(Color.black);

        icon = new ImageIcon(image);
        imageContainer = new JLabel(icon);

        scroll = new JScrollPane(imageContainer);

        add(scroll);
    }
}

1 个答案:

答案 0 :(得分:1)

您的ImagePanel使用JPanel的默认FlowLayout,这可能是您的问题的根源,因为FlowLayouts可以允许比它们更大的组件而不显示整个组件。要对此进行测试,请让您的ImagePanel使用BorderLayout,并将JLabel添加到它BorderLayout.CENTER,以便它填充ImagePanel。或者,您可以完全摆脱ImagePanel,只返回保存JLabel的JScrollPane。