JList<E>, 리스트 컴포넌트
JList<E> 는 여려 개의 아이템을 리스트 형식으로 보여주고 아이템을 선택하도록 하는 리스트 컴포넌트를 구현한다.
E는 리스트에 삽입된는 아이템의 타입으로, 리스트를 생성할 때 E 대신 아이템 타입을 대입하여 구체화해야 한다.
JList<E>는 자체적으로 스크롤을 지원하지 않기 때문에 JScrollPane에 삽입되어야 스크롤이 가능한다.
JList<E> 리스트 생성
리스트는 다음 생성자를 이용하여 생성한다.
JList<E>() | 빈 리스트 |
JList<E>(Vector listData) | 벡터로부터 아이템을 공급받는 리스트 |
JList<E>(Object [] listData) | 배열로부터 아이템을 공급받는 리스트 |
리스트 만들기
다음 그림과 같이 3개의 리스트를 가진 프로그램을 작성하자.
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.jpg"), new ImageIcon("images/icon3.jpg"), new ImageIcon("images/icon4.jpg") };
setTitle("리스트 만들기 예제"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = getContentPane(); c.setLayout(new FlowLayout());
JList<String> strList = new JList<String>(fruits); // 문자열 리스트 생성 c.add(strList);
JList<ImageIcon> imageList = new JList<ImageIcon>(); // 이미지 리스트 생성 imageList.setListData(images); c.add(imageList);
JList<String> scrollList = new JList<String>(fruits); // 문자열 리스트 생성 c.add(new JScrollPane(scrollList)); // 리스트를 JScrollPane에 부착
setSize(300,300); setVisible(true); }
public static void main(String [] args) { new ListEx(); } } |
리스트의 아이템 변경
생성된 리스트를 수정하는 가장 간단한 방법은 JList의 setListData() 메소드를 호출하여 리스트에 수정된 벡터나 배열을 새로 달아주는 것이다.
리스트 생성
Vector<String> v = new Vector<String>(); v.add("Java"); v.add("C언어"); JList<String> nameList = new JList<String>(v); |
리스트 생성후 추가
v.add("C#"); nameList.setListData(v); |
텍스트필드 창을 만들고 이곳에 이름을 입력하고 <Enter> 키를 입력하면 입력된 이름을 리스트 창에 출력하는 프로그램을 작성하자.
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*;
public class ListChangeEx extends JFrame { private JTextField tf = new JTextField(10); private Vector<String> v = new Vector<String>(); 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()); t.setText(""); nameList.setListData(v); } }); }
public static void main(String [] args) { new ListChangeEx(); } } |
JComboBox<E> 콤보박스 컴포넌트
JComboBox<E> 컴포넌트의 생성
콤보박스 컴포넌트는 다음 생성자를 이용하여 생성한다.
JComboBox<E>() | 빈 콤보박스 |
JComboBox<E>(Vector listData) | 벡터로부터 아이템을 공급받는 콤보박스 |
JComboBox<E>(Object [] listData) | 배열로부투 아이템을 공급받는 콤보박스 |
배열로부터 콤보박스 생성
String [] fruits = {"apple", "bannana", "pear", "strawberry", "kiwi"}; JComboBox<String> strCombo = new JComboBox<String>(fruits); |
콤보박스에 동적으로 아이템 추가하기
String [] fruits = {"apple", "bannana", "pear", "strawberry", "kiwi"}; JComboBox<String> strCombo = new JComboBox<String>(); for(int i=0; i<fruits.length; i++) strCombo.addItem(names[i]); |
콤보박스 컴포넌트의 아이템 삭제하기
strCombo.removeItemAt(2); // 3번째 아이템 삭제 |
다음 그림과 같은 두 개의 콤보박스를 만들어라.
왼쪽 콤보박스는 배열로부터 아이템을 공급받고, 오른쪽 콤보박스는 빈 콤보박스에서 addItem()메소드를 이용하여 아이템을 추가하라.
import javax.swing.*; import java.awt.*;
public class ComboBoxEx extends JFrame { private String [] fruits = {"apple", "banana", "kiwi", "mango", "pear", "peach", "berry", "strawberry", "blackberry"}; private String [] names = {"kitae", "jaemoon", "hyosoo", "namyun"};
public ComboBoxEx() { setTitle("콤보박스 만들기 예제"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = getContentPane(); c.setLayout(new FlowLayout());
JComboBox<String> strCombo = new JComboBox<String>(fruits); // 문자열 콤보박스 생성 c.add(strCombo);
JComboBox<String> nameCombo = new JComboBox<String>(); // 콤보박스 생성 for(int i=0; i<names.length; i++) nameCombo.addItem(names[i]); // 콤보박스에 문자열 아이템 삽입
c.add(nameCombo); setSize(300,300); setVisible(true); }
public static void main(String [] args) { new ComboBoxEx(); } } |
JComboBox<E>와 Action 이벤트
int getSelectedIndex( ) | 선택 상태인 아이템의 인덱스 번호를 리턴한다. |
Object getSelectedItem( ) | 선택 상태인 아이템 객체의 레퍼런스를 리턴한다. |
Action 이벤트를 이용한 콤보박스 활용예
import javax.swing.*; import java.awt.event.*; import java.awt.*;
public class ComboActionEx extends JFrame { private String [] fruits = {"apple", "banana", "kiwi", "mango"}; // 콤보박스의 아이템 private ImageIcon [] images = { // 이미지 객체 배열 new ImageIcon("images/apple.jpg"), new ImageIcon("images/banana.jpg"), new ImageIcon("images/kiwi.jpg"), new ImageIcon("images/mango.jpg")}; private JLabel imgLabel = new JLabel(images[0]); // 이미지 레이블 컴포넌트 private JComboBox<String> strCombo = new JComboBox<String>(fruits); // 문자열 콤보박스
public ComboActionEx() { setTitle("콤보박스 활용 예제"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = getContentPane(); c.setLayout(new FlowLayout()); c.add(strCombo); c.add(imgLabel);
// Action 리스너 등록 strCombo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JComboBox<String> cb = (JComboBox<String>)e.getSource(); // Action 이벤트가 발생한 콤보박스 알아내기 int index = cb.getSelectedIndex(); // 콤보박스의 선택된 아이템의 인덱스 번호 알아내기 imgLabel.setIcon(images[index]); // 인덱스의 이미지를 이미지 레이블 컴포넌트에 출력 } });
setSize(300,250); setVisible(true); }
public static void main(String [] args) { new ComboActionEx(); } } |
'프로그램언어 > 자바' 카테고리의 다른 글
스윙 컴포넌트 그리기1 (0) | 2020.11.05 |
---|---|
스윙 컴포넌트의 공통 메소드5 (0) | 2020.11.05 |
스윙 컴포넌트의 공통 메소드3 (0) | 2020.11.04 |
스윙 컴포넌트의 공통 메소드2 (0) | 2020.11.04 |
스윙 컴포넌트의 공통 메소드1 (0) | 2020.11.04 |