如何使用图像创建jlist

时间:2014-06-12 05:36:52

标签: java netbeans jframe jscrollpane jlist

我想在我的jlist中添加一些图片。以下代码效果很好

public class MarioList {

private final Map<String, ImageIcon> imageMap;

public MarioList() {
    String[] nameList = {"Mario", "Luigi", "Bowser", "Koopa", "Princess"};
    imageMap = createImageMap(nameList);
    JList list = new JList(nameList);
    list.setCellRenderer(new MarioListRenderer());

    JScrollPane scroll = new JScrollPane(list);
    scroll.setPreferredSize(new Dimension(300, 400));

    JFrame frame = new JFrame();
    frame.add(scroll);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

public class MarioListRenderer extends DefaultListCellRenderer {

    Font font = new Font("helvitica", Font.BOLD, 24);

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

        JLabel label = (JLabel) super.getListCellRendererComponent(
                list, value, index, isSelected, cellHasFocus);
        label.setIcon(imageMap.get((String) value));
        label.setHorizontalTextPosition(JLabel.RIGHT);
        label.setFont(font);
        return label;
    }
}

private Map<String, ImageIcon> createImageMap(String[] list) {
    Map<String, ImageIcon> map = new HashMap<>();
    try {
        map.put("Mario", new ImageIcon(new URL("http://i.stack.imgur.com/NCsHu.png")));
        map.put("Luigi", new ImageIcon(new URL("http://i.stack.imgur.com/UvHN4.png")));
        map.put("Bowser", new ImageIcon(new URL("http://i.stack.imgur.com/s89ON.png")));
        map.put("Koopa", new ImageIcon(new URL("http://i.stack.imgur.com/QEK2o.png")));
        map.put("Princess", new ImageIcon(new URL("http://i.stack.imgur.com/f4T4l.png")));
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return map;
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new MarioList();
        }
    });
}
}

上面的代码创建了一个新框架并向其添加了一个jscrollpane。而不是我尝试使用Netbeans手动创建框架和jcrollpane。所以代替这个代码;

JList list = new JList(nameList);
    list.setCellRenderer(new MarioListRenderer());

    JScrollPane scroll = new JScrollPane(list);
    scroll.setPreferredSize(new Dimension(300, 400));

    JFrame frame = new JFrame();
    frame.add(scroll);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

我使用了这段代码;

jList1.add(nameList);
    jList1.setCellRenderer(new MarioListRenderer());

这里jList1是我通过Netbeans创建的jlist,它已放入jscrollpane。 但是这段代码不起作用。 请告诉我一种方法来完成这项工作......谢谢

1 个答案:

答案 0 :(得分:0)

假设您正在使用Java 7 + ...

jList1.add(nameList);

应该是

jList1.setListData(nameList);

否则,您需要将nameList包含在ListModel实现