如何以水平方式加载JList?

Bal*_*m26 2 java swing jlist

如何以JList水平方式加载?这是我的代码,我试图显示JList类似于提供的屏幕截图.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.awt.BorderLayout;
import java.io.File;
import java.util.ArrayList;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;

public class Test extends JFrame{

    private JList toolsList;
    private ArrayList<File> toolXmlList;

    public Test()
    {
    toolXmlList = new ArrayList<File>();
    toolXmlList = loadFiles();

    setVisible(true);
    setSize(300,300);
    setTitle("Test Jlist");
    createComponents();

    }

    public void createComponents()
    {
    toolsList = new JList();
    toolsList.setModel(displayDefaltTools());
    toolsList.setLayoutOrientation(javax.swing.JList.VERTICAL_WRAP);
    setLayout(new BorderLayout());
    add(toolsList,BorderLayout.CENTER);
    }

    /**
     * Creates a list model and add the tools to it
     *
     * @return DefaultListModel
     */
    public DefaultListModel displayDefaltTools() {
    DefaultListModel dlistModel = new DefaultListModel();
    String presentation = "";

    for (int i = 0; i < toolXmlList.size(); i++) {
        //System.out.println(idSet.get(i));
        presentation = presentation +  toolXmlList.get(i).getName() ;
        dlistModel.addElement(presentation);
        presentation = "";
    }
    return dlistModel;
    }

    public ArrayList loadFiles()
    {
    ArrayList<File> xmlFiles = new ArrayList<File>();
    File f = new File(".");
    File [] folList = f.listFiles();
    for(int i=0;i<folList.length;i++)
    {
        if(folList[i].getName().startsWith("Tool_Frag"))
        {
            File[] fileList=folList[i].listFiles();
            for(int j=0;j<fileList.length;j++)
            {
                System.out.println(fileList[j].getName());
                xmlFiles.add(fileList[j]);
            }
        }
    }
    return xmlFiles;
    }

    public static void main(String[] args)
    {
    new Test();
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图以这种方式获得一个jlist,项目显示在另一个旁边 关于jlist布局的截图

Aar*_*lla 5

你将不得不做两件事:

  1. 设置LayoutOrientationJList.HORIZONTAL_WRAPJList.VERTICAL_WRAP根据文档.

  2. 使列表足够宽,以便每行可以显示多个元素.使用setVisibleRowCount()此.

    调用setPreferredSize()也有效但在使用布局管理器时可能会导致问题.

或者,JTable如果必须确保一定数量的行/列(如同一行中的所有元素),请考虑使用if.

  • 使用`setVisibleRowCount()`将利用渲染器的首选大小; 调用`setPreferredSize()`是[有问题的](http://stackoverflow.com/q/7229226/230513). (2认同)