JList<E>, 리스트 컴포넌트
JList<E>
JList<E>는 여러 개의 아이템을 리스트 형식으로 보여주고 아이템을 선택하도록 하는 리스트 컴포넌트를 구현합니다. JDK7부터 JList에 제네릭(Generic)을 도입하여 JList<E>(이하 JList 또는 리스트)로 사용합니다. E는 리스트에 삽입하는 아이템의 타입으로, 리스트를 생성할 때 E 대신 아이템 타입을 대입하여 구체화해야 합니다. 문자열과 이미지가 아이템으로 사용 가능하며, 사용자는 하나 이상의 아이템을 선택할 수 있습니다.JList<E>는 자체적으로 스크롤을 지원하지 않기 때문에 JScrollPane에 삽입되어야 스크롤이 가능합니다.
JList<E> 리스트 생성과 특징
리스트는 다음 생성자를 이용하여 생성합니다.
JList<E>() // 빈 리스트
JList<E>(Vector listData) // 벡터로부터 아이템을 공급받는 리스트
JList<E>(Object [] listData) // 배열로부터 아이템을 공급받는 리스트
객체 배열로부터 리스트 생성
JList<E>는 스크롤을 지원하지 않기 때문에 ScrollPane에 삽입하면 스크롤이 가능합니다.
리스트 만들기
import javax.swing.*;
import java.awt.*;
public class ListEx extends JFrame {
private String [] fruits= {"apple", "banana", "kiwi", "mango", "pear",
"peach", "berry", "strawberry", "blackberry"};
private ImageIcon [] images = { new ImageIcon("images/icon1.png"),
new ImageIcon("images/icon2.png"),
new ImageIcon("images/icon3.png"),
new ImageIcon("images/icon4.png") };
public ListEx() {
setTitle("리스트 만들기 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JList<String> strList = new JList<>(fruits); // 문자열 리스트 생성
c.add(strList);
JList<ImageIcon> imageList = new JList<ImageIcon>(); // 이미지 리스트 생성
imageList.setListData(images);
c.add(imageList);
JList<String> scrollList = new JList<>(fruits); // 문지열 리스트 생성
c.add(new JScrollPane(scrollList)); // 리스트를 JScrillPane에 부착
setSize(300, 300);
setVisible(true);
}
public static void main(String[] args) {
new ListEx();
}
}
[실행 결과]

리스트의 아이템 변경
생성된 리스트를 수정하는 가장 간단한 방법은 JList의 setListData() 메소드를 호출하여 리스트에 수정된 백터나 배열을 새로 달아주는 것입니다.
Vector<String> v = new Vector<String>();
v.add("황기태");
v.add("이재문");
JList<String> nameList = new JList<String>(v);
벡터 v에 추가한 후 setListData(v)를 호출하여 벡터 v를 리스트에 다시 연결하면 됩니다.
v.add("김남윤");
nameList.setListData(v);
리스트의 아이템 변경
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
public class ListChangeEx extends JFrame {
private JTextField tf = new JTextField(10);
private Vector<String> v = new Vector<>();
private JList<String> nameList = new JList<String>(v);
public ListChangeEx() {
setTitle("리스트 변경 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(new JLabel("이름 입력 후 <Enter> 키"));
c.add(tf);
v.add("황기태");
v.add("이재문");
nameList.setVisibleRowCount(5); // 리스트가 보여주는 행의 수
nameList.setFixedCellWidth(100); // 리스트의 폭
c.add(new JScrollPane(nameList));
setSize(300, 300);
setVisible(true);
// JTextField에 ActionLister 등록. <Enter> 키 처리
tf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JTextField t = (JTextField) e.getSource();
v.add(t.getText()); // 벡터 v에 입력된 이름 추가
t.setText("");
nameList.setListData(v); // 벡터 vdp 입력된 모든 이름으로 리스트 새로 만들기
}
});
}
public static void main(String[] args) {
new ListChangeEx();
}
}
[실행 결과]

'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| JSlider, 슬라이더 컴포넌트 (2) | 2025.07.15 |
|---|---|
| JComboBox<E>, 콤보박스 컴포넌트 (6) | 2025.07.12 |
| JTextArea, 텍스트 영역 컴포넌트 (2) | 2025.07.07 |
| JTextField, 텍스트필드 컴포넌트 (0) | 2025.07.04 |
| JRadioButton, 라디오버튼 컴포넌트 (1) | 2025.07.01 |