내 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);
그렇지 않으면 당신이 필요합니다이어야한다 ... 당신
'scroll.setPreferredSize (new Dimension (300, 400)); '을 제거하고 ['JL ist # setVisibleRowCount'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JList.html#setVisibleRowCount (int)) – MadProgrammer
Netbeans를 사용하여 jlist 및 jscrollpane을 생성했습니다. 그래서 저는 다시 그런 것들을 만들 필요가 없습니다. 내가 그 일들을 제거 할 때; 그것은 작동하지 않습니다! – user9480
* "작동하지 않습니다"* - 그게 무슨 뜻입니까? 컴파일하지 않고, 화면을 표시하지 않으며, 원하지 않는 것처럼 보입니까? 스크롤 창과 프레임이 있으면 화면에 표시되지 않습니다. – MadProgrammer