java中JList如何将文字显示到图片下面?

2025-06-25 13:08:33
推荐回答(1个)
回答1:

JList模型

=========

import javax.swing.*;

import javax.swing.event.*;

import java.util.*;

import java.io.*;

/**

 * @author Hardneedl

 */

class ImageListModel implements ListModel {

    private java.util.List L = new ArrayList(0);

    ImageListModel() {

        L.addAll(

            Arrays.asList(new File(".").listFiles(new FilenameFilter(){

            public boolean accept(File dir, String name) {

                return name.toLowerCase().endsWith(".png");

            }

        })));

    }

    public int getSize() {return L.size();}

    public Object getElementAt(int index) {return L.get(index);}

    public void addListDataListener(ListDataListener l) {}

    public void removeListDataListener(ListDataListener l) {}

}

图形界面

======================

import javax.swing.*;

import java.awt.*;

import java.io.*;

import java.net.*;

/**

 * @author Hardneedl

 */

final class IconRenderer extends JFrame {

    public String getTitle() {return "ImageIcon Renderer";}

    static private final Dimension size = new Dimension(160, 170);

    public Dimension getPreferredSize() {return size;}

    public Dimension getMaximumSize() {return size;}

    public Dimension getMinimumSize() {return size;}

    public Dimension getSize() {return size;}

    private JList jlist;

    IconRenderer() throws HeadlessException {

        init();

        attachListeners();

        doLay();

    }

    private void init() {

        jlist = new JList(new ImageListModel());

        jlist.setCellRenderer(new DefaultListCellRenderer(){

            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

                Component c = super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus);

                if (value instanceof File) {

                    try {

                        ImageIcon image = new ImageIcon( ((File)value).toURI().toURL()  );

                        setIcon(image);

                        setText(((File)value).getName() );

                        setVerticalTextPosition(SwingConstants.BOTTOM );

                        setHorizontalTextPosition(SwingConstants.CENTER );

                    } catch(MalformedURLException e) {

                        e.printStackTrace();

                    }

                }

                else {

                    setText("???");

                }

                return c;

            }

        });

    }

    private void attachListeners() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    private void doLay() {

        Container container = getContentPane();

        container.add(new JScrollPane(jlist));

        pack();

        setVisible(true);

    }

    public static void main(String[] args) {new IconRenderer();}

}