Java:即使设置了`setVerticalScrollBarPolicy`和其他选项,Scrollbar也不会出现

时间:2013-11-02 13:46:09

标签: java swing awt windowbuilder

我的JScrollpane出了问题。我从列表中添加了标签。添加工作正常,我看到了标签。添加的标签数量对我来说是未知的,因此可能看起来scrollpane的边界不够。这是使用Scrollpane的优势,因此我可以在需要时实际向下滚动。但滚动条没有出现。我知道有很多这样的问题,但我几乎尝试了所有提议的建议。我尝试了setPreferredSize()setLayout()scrollPaneApps.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS),但没有任何效果。

public DisplayProperties() {

   setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
   setBounds(100, 100, 450, 300);
   contentPane = new JPanel();
   setContentPane(contentPane);
   contentPane.setLayout(null);
   contentPane.setPreferredSize(new Dimension(450,300));

   JScrollPane scrollPane1 = new JScrollPane();
   scrollPane1.setBounds(15, 54, 195, 202);
   scrollPane1.setViewportBorder(new LineBorder(new Color(0, 0, 0)));
   scrollPane1.setPreferredSize(new Dimension(185,195));
   scrollPane1.setLayout(null);   
   scrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
   contentPane.add(scrollPane1);


    int b = 0;

    for(String s : XMLParser.ApplicationsListGUI)
    {
        b = b + 20;
        JLabel lbl = new JLabel("lbl"+s);
        lbl.setText(s);
        lbl.setBounds(10,b,100,15);
        scrollPane1.add(lbl);
        scrollPane1.revalidate();   
        lbl.setVisible(true);
    }   
}

那么为什么这个Scrollbar不会出现呢?

2 个答案:

答案 0 :(得分:4)

您似乎涉及两个JScrollPanes,scrollPaneApps,您设置了一个垂直滚动条策略,您尝试添加组件,但从不添加到GUI,以及scrollPane1,您没有设置策略,从不添加组件,但执行添加到GUI。对不起,但这太疯狂了。您需要解决此问题,以便您的代码有意义:

  • 将具有垂直滚动条策略集的实际JScrollPane添加到GUI。如果它没有添加到GUI中,那么它将永远不会被看到是有意义的。
  • 不要将组件直接添加到JScrollPane,而是通过setViewportView(...)方法添加到其JViewport。或者您可以将一个组件添加到JScrollPane构造函数中,这只是用于将其添加到视口的语法糖。
  • 避免空布局和绝对定位(避免setBounds(...))。使用这些将使您的GUI严格,丑陋,几乎不可能在以后改进。 从不将JScrollPane的布局设置为null,如果这样做,它将停止工作。完全。

答案 1 :(得分:1)

由于您没有scrollPaneApps面板的布局,因此无法显示。所以删除这一行,它应该显示。

scrollPane1.setLayout(null);

希望它有所帮助。