【问题标题】:JScrollPane Contents Not ShowingJScrollPane 内容不显示
【发布时间】:2011-05-28 03:51:26
【问题描述】:

我在 JPanel 中有一个 JTextArea,然后将其放入 JScrollPane。当包含 JScrollPane 的 JPanel 首次显示时,JScrollPane 会显示,但不会显示内容。一旦 JFrame 调整大小,内容就会显示出来。

JTextArea area = new JTextArea(6, 20);
area.setText("Some test text");

JPanel panel = new JPanel(new BorderLayout());
panel.add(area, BorderLayout.CENTER);

JScrollPane pane = new JScrollPane();
pane.setBounds(20, 20, WIDTH - 40, 300 - 40);
pane.setPreferredSize(new Dimension(WIDTH - 40, 300 - 40));
add(pane);
pane.setViewportView(panel);

【问题讨论】:

  • 它对我来说很好用。也许您需要显示更多代码以便我们了解您的问题,因为我没有看到您发布的代码中的错误。可能会显示您在 JFrame 中添加内容的位置,然后使其可见。您是否在添加组件之后调用 pack 和 setVisible(true) ?最好是发布SSCCE。另外,setBounds 业务是怎么回事?
  • 我测试了代码,一切正常

标签: java swing resize jpanel jscrollpane


【解决方案1】:
pane.setBounds(20, 20, WIDTH - 40, 300 - 40); 
pane.setPreferredSize(new Dimension(WIDTH - 40, 300 - 40)); 

这两行代码没有意义(尽管它们不是问题的原因)

当您使用“空布局”时使用第一行。

当您使用布局管理器时使用第二个。

它们不应该一起使用。

第二个是首选,因为您应该使用布局管理器。

【讨论】:

  • 哦,那只是一些我从未取出的剩余代码,但无论如何都感谢。
  • @Glenn Nelson,当您发布代码时,您发布的代码应该是您正在使用的“准确”代码,因为我们不会花时间去追逐野鹅。
  • 好吧,鉴于代码大约有 600 行长,我认为不这样做是个好主意。我没有意识到问题出在哪里,虽然它在那里。
  • 我们没有要求 600 行代码!!!您在哪里要求获得 SSCCE !!!大多数时候,问题并不在你认为的地方。这就是您需要隔离问题的原因,这也是 SSCCE 的目的。
【解决方案2】:

在应用程序中,不同的 JPanel 以类似于幻灯片的方式被换出。所以会在代码中找到这样的东西:

panel.remove(slide1);
panel.add(slide2);
panel.repaint();

问题在于第二张幻灯片 slide2 的所有内容都不会显示出来。解决方法是添加

frame.validate();

其中frame是面板的父窗口。

【讨论】:

  • 或者,如果您不使用 CardLayout,那么您将使用 panel.revalidate(),然后使用 panel.repaint()。无需验证整个框架。
【解决方案3】:

new JScrollPane(panel);

我相信您需要将面板添加到滚动窗格构造函数中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 2013-01-29
    相关资源
    最近更新 更多