JList는 JComponent 클래스의 하위 클래스로, 사용자가 단일 선택 또는 다중 선택을 할 수 있도록 지원하는 Swing 컴포넌트입니다. 다만 JList 클래스 자체는 스크롤바를 지원하지 않기 때문에, 스크롤 기능이 필요하다면 JScrollPane 클래스를 함께 사용해야 합니다. JScrollPane을 적용하면 항목 수가 많아져도 스크롤바가 자동으로 관리됩니다.
또한 DefaultListModel 클래스는 JList 컨트롤에 표시되는 항목들을 관리하기 위한 간단한 리스트 모델 구현체를 제공합니다. 이 모델의 addElement() 메서드를 사용하면 JList에 손쉽게 항목을 추가할 수 있습니다.
실무에서 자주 쓰이는 패턴 중 하나는 바로 텍스트 필드(JTextField)에 입력된 값을 읽어 JList에 동적으로 추가하는 것입니다. 예를 들어, 사용자가 텍스트 필드에 내용을 입력하고 Enter 키를 누르면 해당 값이 리스트에 등록되는 방식입니다. 아래 예제 코드를 통해 구현 방법을 살펴보겠습니다.
예제 코드
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JTextfieldToJListTest extends JFrame {
private DefaultListModel model;
private JList list;
private JTextField jtf;
public JTextfieldToJListTest() {
setTitle("JTextfieldToJList Test");
model = new DefaultListModel();
jtf = new JTextField("Type something and Hit Enter");
// 마우스 클릭 시 안내 문구 제거
jtf.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
jtf.setText("");
}
});
list = new JList(model);
list.setBackground(Color.lightGray);
// Enter 키 입력 시 텍스트 필드의 값을 JList에 추가
jtf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
model.addElement(jtf.getText());
JOptionPane.showMessageDialog(null, jtf.getText());
jtf.setText("Type something and Hit Enter");
}
});
add(jtf, BorderLayout.NORTH);
add(new JScrollPane(list), BorderLayout.CENTER);
setSize(375, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new JTextfieldToJListTest();
}
}코드 설명
- DefaultListModel 생성: JList에 표시될 데이터를 관리하는 모델 객체입니다.
- addActionListener(): 텍스트 필드에서 Enter 키를 누르면 actionPerformed() 메서드가 호출됩니다.
- model.addElement(jtf.getText()): 텍스트 필드에 입력된 값을 읽어 리스트 모델에 추가함으로써 JList 화면에 즉시 반영됩니다.
- JScrollPane 적용: 리스트 항목이 많아질 경우 자동으로 스크롤바가 생성됩니다.
실행 결과
프로그램을 실행하면 상단의 텍스트 필드에 원하는 문자열을 입력하고 Enter 키를 누를 때마다 해당 값이 중앙의 JList에 순차적으로 추가되는 것을 확인할 수 있습니다.