JPanel不会在JScrollPane中滚动

时间:2014-11-15 04:26:13

标签: java swing jpanel jscrollpane

我已经看过许多假设让JPanel能够在JScrollPane中滚动的例子,但是在我的情况下没有一个实现工作。我的JPanel比JScrollPane大,但是当我运行它时,滚动条并没有相应地反映到JPanel的大小。

        ePanel = new EnvironmentPanel(); // class that extends JPanel

        environmentSP = new JScrollPane(ePanel.getPanel());
        environmentSP.setPreferredSize(new Dimension(1235, 780));
        environmentSP.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        environmentSP.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        environmentSP.setViewportView(ePanel.getPanel());

        this.frame.getContentPane().add(splitPane, BorderLayout.CENTER);
        this.frame.getContentPane().add(environmentSP, BorderLayout.EAST);

        splitPane.setRightComponent(environmentSP);

1 个答案:

答案 0 :(得分:1)

我们无法在没有猜测的情况下回答您的问题,因为您没有发布minimal runnable example program,但无论如何我都会猜测。我的猜测是这个假设:

  

我的JPanel大于JScrollPane

实际上是假的。找出你自己 - 调试你的代码并打印出构成组件的大小,包括JScrollPane持有的JPanel,ePanel.getPanel(),以及JScrollPane本身在组件呈现后 当然,你会看到。

例如,我所做的是将println语句放在paintComponent覆盖中,如:

public class MyPanel extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {
       super.paintComponent(g);
       System.out.printf("Panel Size: [%d, %d]%n", getWidth(), getHeight());
    }
}

这将告诉您完全组件的大小在呈现时。在setPreferredSize(...)修复之前执行此操作,您将看到有时最好的调试方法是抛弃所有假设,而是测试以查看运行代码中实际发生的情况。