Java 如何制作JList填充JPanel

Java 如何制作JList填充JPanel,java,swing,jpanel,layout-manager,jlist,Java,Swing,Jpanel,Layout Manager,Jlist,我有一个JPanel,里面加了一个JList。如何使JList像我的JPanel一样获得高度和重量。它需要完全填满它 如果我的JList中有两个项目,我想其中一个是高度的1/2,如果是高度的3-1/3,等等 有什么解决办法吗 public class RozkladLotow extends JPanel{ Vector<Samolot> samoloty; public RozkladLotow(GeneratorSamolotow g){ super(); thi

我有一个
JPanel
,里面加了一个
JList
。如何使
JList
像我的
JPanel
一样获得高度和重量。它需要完全填满它

如果我的
JList
中有两个项目,我想其中一个是高度的1/2,如果是高度的3-1/3,等等

有什么解决办法吗

public class RozkladLotow extends JPanel{
Vector<Samolot> samoloty;
public RozkladLotow(GeneratorSamolotow g){
    super();
    this.setLayout(new BorderLayout());
    Miasto m1 = new Miasto("Warszawa",571,142,"Polska",10,10);//sample objects needed to create a `Samolot`
    Miasto m2 = new Miasto("Pekin",571,142,"Chiny",10,10);//sample objects needed to create a `Samolot`
    samoloty = new Vector<Samolot>();
    samoloty.add(new Samolot(0, m1, m2, 0, 0, 0 , 0));
    samoloty.add(new Samolot(0, m2, m1, 0, 0, 0 , 0));
    JList lista = new JList<Samolot>(samoloty);
    add(lista,BorderLayout.CENTER);     
}
}
公共类Rozkladloto扩展了JPanel{
向量相似性;
公共RozkladLotow(发电机Amolotow g){
超级();
此.setLayout(新的BorderLayout());
Miasto m1=新的Miasto(“Warszawa”,571142,“Polska”,10,10);//创建“Samolot”所需的示例对象`
Miasto m2=新的Miasto(“Pekin”,571142,“Chiny”,10,10);//创建“Samolot”所需的示例对象`
samoloty=新向量();
添加(新的Samolot(0,m1,m2,0,0,0,0),0);
添加(新的Samolot(0,m2,m1,0,0,0,0),0);
JList lista=新JList(samoloty);
添加(lista,BorderLayout.CENTER);
}
}
类中的Ofc
Samolot
我有
toString()
函数返回sample
String
试试这个

jPanel.setLayout(new BorderLayout());
jPanel.add(jList, BorderLayout.CENTER);
     JList<String> list = new JList<>();
     JPanel panel = new JPanel(new BorderLayout()); 
     panel.add(list,BorderLayout.CENTER);
JList list=new JList();
JPanel panel=newjpanel(newborderlayout());
面板.添加(列表,边框布局.中心);
如果面板中有单个构件,则会自动拉伸该构件

如何使JList获得像我的JPanel一样的身高和体重。 它需要完全填满它

在本例中,解决方案是将列表添加到
JPanel
中,如其他答案所述

如果我的JList中有2个项目,我希望其中1个将是1/2 高度,如高度的3-1/3等

这个要求有点棘手:单元格高度取决于列表的可见矩形和列表中的元素数要显示的元素数,这可能不同

例如,假设列表有6个元素,但您最多只想显示5个单元格(行),然后滚动列表。您可以执行以下操作:

  • 使用方法设置要显示的最大单元格数
  • 将添加到列表中以侦听在调整列表大小时触发的组件事件:
  • 使用方法获取列表的可见矩形
  • 使用方法设置固定的单元格高度
例如:

DefaultListModel model = new DefaultListModel();
model.addElement("Fender");
model.addElement("Gibson");
model.addElement("Ibanez");
model.addElement("Paul Reed Smith");
model.addElement("Jackson");
model.addElement("Godin"); // The model has 6 elements

JList list = new JList(model);
list.setVisibleRowCount(5); // I want to show only 5 elements, then scroll the list

list.addComponentListener(new ComponentAdapter() { // ComponentAdapter implements ComponentListener interface
    @Override
    public void componentResized(ComponentEvent e) {
        JList list = (JList)e.getComponent();
        int divider = Math.min(list.getVisibleRowCount(), list.getModel().getSize());
        list.setFixedCellHeight(list.getVisibleRect().height / divider);
    }
});

JPanel content = new JPanel(new BorderLayout());
content.add(new JScrollPane(list));
由于我使用来确定最小分隔符,以便正确设置固定单元格高度,如果列表模型只有2个元素,它们都将填充每个可用高度的50%

注意:如果希望始终显示列表中的所有元素,则更容易:

list.addComponentListener(new ComponentAdapter() {
    @Override
    public void componentResized(ComponentEvent e) {
        JList list = (JList)e.getComponent();
        list.setFixedCellHeight(list.getVisibleRect().height / list.getModel().getSize());
    }
});

仍然不起作用。组件的重量填充了
JPanel
,但高度为。若我在列表中得到3个元素,我得到了3行结果,若5,5行。他们没有填满我所有的
JPanel