为什么不工作我JScrollPane的?(Why is my JScrollPane not wor

2019-10-16 21:25发布

有人可以明白为什么我的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出来。 什么youre看是构造我的一个子类JFrame ,其中包含3片。 该ApplicationPanel在这一点上只是一个JPanel 。 所述loadImageIn()方法将打开文件选择,然后加载其被涂到所选择的图像frameContent 。 图像显示细腻,一切正常,除非我调整窗口的大小,没有滚动条。

Answer 1:

你有这条线,它增加了ApplicationPanelvisibleArea ...

visibleArea.add(frameContent);

也许你实际上意味着此,它增加了JScrollPanevisibleArea (和JScrollPane已经包含了ApplicationPanel )...

visibleArea.add(mainImageScrollPane);

当你调用new JScrollPane(frameContent)它没有做任何事情来在面板内部,它只是增加了外绕的包装。 所以,如果你要滚动的能力,你需要参考的JScrollPane包装,而不是面板本身。



Answer 2:

You didn't specify any size for your frameContent. Is it intentional?

Additionally your frameContent is later on being added to visibleArea. Meaning no longer in the mainImageScrollPane JScrollPane

Maybe you wanna have: visibleArea.add(mainImageScrollPane);, but you need to set your panel size



Answer 3:

mainImageScrollPane.setViewportView(<component_to_be_scrollable>);


文章来源: Why is my JScrollPane not working?