1

有人可以弄清楚为什么我JScrollPane的不工作。也许我可能错过了一些东西。我意识到如果没有比我所展示的更多的上下文,这可能很愚蠢,但请询问,我很乐意提供更多。

public ApplicationFrame(String title, int x, int y, int width, int height) {
        // Constructor for the ApplicationFrame, no implicit Construc.
        setTitle(title);
        setResizable(true);
        setBounds(x, y, width, height);
                    setLayout(new BorderLayout());
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setIconImage(new ImageIcon(getClass().getResource("resources/topLeft.png")).getImage());
        topMostMenuBar = new TopMenuBar(this);
        setJMenuBar(topMostMenuBar.getMyJMenuBar());
        paneEdge = BorderFactory.createLineBorder(Color.gray);
        blackline = BorderFactory.createLineBorder(Color.black);
        this.frameContent = new ApplicationPanel() {
            //@Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawImage(TI, 0, 0, null);
            }
        };
        mainImageScrollPane = new JScrollPane(frameContent);
        statusPanel = new ApplicationPanel(new Color(0xfff0f0f0));
        leftPanel = new ApplicationPanel(new Color(0xfff0f0f0));
        testPanel = new ColorPanel(new Color(0xfff0f0f0));
        testPanel.setPreferredSize(new Dimension(50,300));
        add(mainImageScrollPane, BorderLayout.CENTER );
        add(statusPanel, BorderLayout.SOUTH);
        add(leftPanel, BorderLayout.WEST);
        Container visibleArea = getContentPane();
        visibleArea.add(frameContent);
        setVisible(true);
        do {
            loadImageIn();
        } while (!initLoadSuccess);
        initButtons();
        leftPanel.add(testPanel, BorderLayout.SOUTH);
    } // end Constructor **

这是一段很大的代码,所以我不确定如何从中制作 SSCCE。您正在查看的是我的 a 子类的构造函数JFrame,它包含 3 个面板。在这ApplicationPanel一点上只是一个JPanel. 该loadImageIn()方法打开一个文件选择器,然后加载选择的图像,该图像被绘制到frameContent. 图像显示正常,一切正常,除了当我调整窗口大小时,没有滚动条。

4

3 回答 3

2

您有这条线,它将...添加ApplicationPanelvisibleArea...

visibleArea.add(frameContent);

也许你真的是这个意思,它添加了JScrollPanevisibleArea并且JScrollPane已经包含了ApplicationPanel)......

visibleArea.add(mainImageScrollPane);

当您调用 时new JScrollPane(frameContent),它不会对其中的面板做任何事情,它只是在外部添加一个包装器。所以,如果你想要滚动的能力,你需要引用JScrollPane包装器,而不是面板本身。

于 2012-06-20T10:13:08.203 回答
0

您没有为您的frameContent. 是故意的吗?

此外,您frameContent稍后将被添加到visibleArea. 不再存在的意思mainImageScrollPane JScrollPane

也许你想要: visibleArea.add(mainImageScrollPane);,但你需要设置你的面板大小

于 2012-06-20T10:09:37.333 回答
0
mainImageScrollPane.setViewportView(<component_to_be_scrollable>);
于 2012-06-20T11:50:03.683 回答