2014-06-12 3 views
0

내 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에 넣습니다. 하지만이 코드는 작동하지 않습니다.

jList1.add(nameList); 

jList1.setListData(nameList); 

그렇지 않으면 당신이 필요합니다이어야한다 ... 당신

+0

'scroll.setPreferredSize (new Dimension (300, 400)); '을 제거하고 ['JL ist # setVisibleRowCount'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JList.html#setVisibleRowCount (int)) – MadProgrammer

+0

Netbeans를 사용하여 jlist 및 jscrollpane을 생성했습니다. 그래서 저는 다시 그런 것들을 만들 필요가 없습니다. 내가 그 일들을 제거 할 때; 그것은 작동하지 않습니다! – user9480

+0

* "작동하지 않습니다"* - 그게 무슨 뜻입니까? 컴파일하지 않고, 화면을 표시하지 않으며, 원하지 않는 것처럼 보입니까? 스크롤 창과 프레임이 있으면 화면에 표시되지 않습니다. – MadProgrammer

답변

0

당신이 자바 7 +를 사용하는 가정 감사 ...이 작품을 얻기 위해 나에게 방법을 알려주세요 ListModel 구현 내에서 nameList을 래핑하려면

+0

고맙습니다! 지금 그것은 일하고있다!! :) – user9480

관련 문제