2017-08-17 102 views
0

enter image description here我使用Java创建一个JList,我想要的是列表的高度根据列表中的行数是动态的:如何在jlist中创建动态Jlist时jlist的高度取决于列表中的行数?

  • 我的意思是,当有列表中没有行,它不应该显示空列表框,(我想将jlist的最小高度设置为0)
  • 我想设置列表的最大高度是固定的,当行数超过最大高度时,它应该开始滚动列表
  • 当列表占据比最大高度尺寸更小的高度时,它应该只显示那些被行占据的空间(我的意思是不应该在列表中显示空白空间)

我已经创建了一个jlist,但是当行数占用比最大列表空间高度更小的空间时,它显示空的空间。

enter image description here

回答

2

可以重写getPreferredSize()方法返回根据您的尺寸要求。

但首先,你需要做的:

list.setVisibleRowCount(???); 

这将允许默认首选大小计算的滚动条出现之前,计算你的列表的大小。

然后您需要修改JListgetPreferredSize()方法。它可能看起来像这样:

@Override 
public Dimension getPreferredSize() 
{ 
    Dimension d = super.getPreferredSize(); 

    int rows = getModel().getSize(); 

    if (rows < getVisibleRowCount()) 
    { 
     int rowHeight = d.height/getVisibleRowCount() 
     d.height = rows * rowHeight; 
    } 

    return d; 
} 
+0

我不擅长GUI中的gui设计。我正在使用netbeans作为拖放,我在jframe中删除jlist,其余工作是由netbeans完成的...我不是underStanding如何重写此getPreferredSize()函数... –

+0

@HemantDhanuka,如果你不知道如何重写一个类的方法,那么你不应该使用GUI设计器。我从来没有使用GUI设计器,所以我不能告诉你如何去做。我宁愿花时间学习Java,而不是IDE。如果您切换到不同的IDE,那么您的代码将无法在其他IDE中维护。所以我建议你只使用IDE来帮助编译和调试,但不能用于生成表单或代码。 – camickr