java jlist有时不会完全显示其中一个项目

时间:2012-06-06 19:23:58

标签: java swing jscrollpane jlist

我遇到了Jlist的问题。我有ScrollPane,我添加了Jlist。有时候我没有看到列表中的第一项。(我也看到了列表中其他项目的这种行为)

我感谢任何帮助。

感谢,enter image description here

这是代码段

-JList创建:

    jAllScrollPane = new JScrollPane();
    jAllScrollPane.getViewport().add(allNetLayer);
    allNetLayer.setVisibleRowCount(3);
  • 我通过以下方法将项目添加到JList

     void addItemToList(String lay)
     {
            layerInit =1;
            if(lay.compareTo("All") ==0)
            {
                 listData.clear();
            }
            if(lay.compareTo("DONE") == 0)
            {
                 allLay.setListData(listData);
                 jAllScrollPane.updateUI();
            }
            else
            {
                 listData.addElement(lay);
            }
            layerInit =0;
      }   
    
  • GUI创建:

     javax.swing.GroupLayout jLogPanelLayout = new javax.swing.GroupLayout(jLogPanel);
    jLogPanel.setLayout(jLogPanelLayout);
    jLogPanelLayout.setHorizontalGroup(
                ....
                ....
                .addComponent(jAllScrollPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 200, javax.swing.GroupLayout.DEFAULT_SIZE))
                ....
                ....
            .addContainerGap())
    );
         jLogPanelLayout.setVerticalGroup(
            ....
            ....
             .addComponent(jAllScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE)
             ....
             ....
            .addGap(20,20,20))))
    
    );
    jTabbedPane1.addTab("All", jLogPanel);
    

2 个答案:

答案 0 :(得分:1)

您发布的代码非常混乱。编译它也很困难。

我唯一可以为你做的是

  • 建议 - 阅读@mKorbel评论,并把它带到你的心里
  • 使用更简单的布局 - BorderLayoutGridLayout等或MigLayout
  • 在Swing的模型上使用fire*(data changed)方法,重绘()
  • 您可以使用new JScrollPane(<panel inside>)
  • addItemToList应该有single responsibility - 添加项目到列表 - 条件不应该在那里
  • 您不应重置整个列表模型数据以添加一个项目
  • 您可以import - 而不是每次javax.swing.GroupLayout
  • 创建GUI时不应创建状态 - layerInit

答案 1 :(得分:0)

而不是使用:

jAllScrollPane = new JScrollPane();
jAllScrollPane.getViewport().add(allNetLayer);

添加Component,使用方法JScrollPane.html#setViewportView(java.awt.Component)(如果你不想使用带参数的JScrollPane构造函数)。

  

不直接向JScrollPane构造函数提供视图的应用程序应使用此方法指定将在滚动窗格中显示的可滚动子项。