为什么我的JScrollPane没有显示我的JPanel?

时间:2013-04-14 11:43:15

标签: java swing jpanel jscrollpane layout-manager

我有一个JPanel,我希望它能够滚动,所以我将它添加到JScrollPane,但我的JScrollPane没有完全显示我的Panel。只显示了它的一个非常小的角落,它也没有滚动。但是当我只将LPanel添加到我的JFrame时,它显示正确! 谁能告诉我我在这里做错了什么?

关于我的代码的信息:

  • LPanel从JPanel扩展而且我已经覆盖了油漆。但作为 我说,油漆工作正常!它有自己的宽度和高度 是2 ^ k。
  • k是我面板中的行数。

这是我的代码:

public class Graphics extends JFrame {
  LPanel panel;
  int k;
  public Graphics(int k1) {
    setLayout(null);
    this.k = k1;
    panel = new LPanel(k);
    panel.setSize(panel.width * 30, panel.height * 30);
    new CoveringwithLs(k, panel);
    JScrollPane pane = new JScrollPane(panel);
    pane.setLocation(20, 20);
    if (k < 4) {
      pane.setSize(panel.width * 30, panel.height * 30);
      this.setSize(panel.width * 30 + 80, panel.height * 30 + 80);
    } else {
      pane.setSize(panel.width * 30, 600);
      this.setSize(panel.width * 30 + 80, 600);
    }
    getContentPane().add(pane);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
  }
  public static void main(String[] args) {
    new Graphics(3);
  }
}

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

  

我无法添加一个例子,

当然可以。你已经有了。现在您需要做的是遵循给出的建议并使用布局管理器而不是空布局。

  

LPanel从JPanel扩展,我已经覆盖了油漆。

自定义绘制是通过覆盖paintComponent()方法而不是paint()方法完成的。

  

它有自己的宽度和高度,为2 ^ k。

您需要覆盖面板的getPreferredSize()方法才能返回尺寸。然后滚动窗格将正常运行。

答案 1 :(得分:0)

您是否已将滚动条添加到ScrollPane。 e.g。

 JScrollPane pane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

答案 2 :(得分:-1)

您的JPanel需要set the preferred size,否则JScrollPane不知道它的滚动条需要支持的组件有多大。 setSize有不同的目的,在这个cas中是不够的。