ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 자바 JList<E>,JComboBox, JSlider, 슬라이더,JSlider와 Change 이벤트, 예제들
    Languages/Java 2021. 5. 10. 14:31
    반응형

     

     

     

     

     

     

     

     

     

    JList<E> 리스트 컴포넌트

     

     

    리스트 컴포넌트란?

    여러 개의 아이템을 리스트 형식으로 보여주고 선택하는 컴포넌트

    여러 개의 아이템을 리스트 형식으로 보여주고 선택하는 컴포넌트

    JCombobox<E>와 기본적으로 같은 기능

    JScrollPane에 JList<E>를 삽입하여 스크롤 가능

     

    JList<E>

    JDK7부터 제네릭 리스트로 바뀜

    <E>에 지정된 타입의 객체만 저장하는 리스트

     

     

    생성자

     

    JList<E>() 빈 리스트
    JList<E>(Vector lsitData) 벡터로부터 아이템을 공급받는 리스트
    JList<E>(Object [] listData) 배열로부터 아이템을 공급받는 리스트

     

     

     

     

     

    리스트를 생성하는 방법

     

     

    1. 객체 배열로 아이템 제공

     

    Sring [] fruits= {"apple", "banana", "kiwi", "mango", "pear", "peach", 
    "berry", "strawberry", "blackberry"};
    JList<String> strList = new JList<String>(fruits);

     

    2. Vector로 아이템 제공

     

    Vector v = new Vector();
    v.add("apple");
    v.add("banana");
    v.add("kiwi"); 
    JList<String> vList = new JList<String>(v);

     

    3. 빈 JList 컴포넌트를 생성하고 setListData()로 아이템 제공

     

    ImageIcon [] images = {new ImageIcon("images/icon1.png"), 
    new ImageIcon("images/icon2.png"), 
    new ImageIcon("images/icon3.png"), 
    new ImageIcon("images/icon4.png")
    };
    JList<ImageIcon> imageList = new JList<ImageIcon>();
    imageList.setListData(images);

     

    4. 스크롤 지원

     

    JList<String> scrollList = new JList<String>(fruits);
    new JScrollPane(scrollList);

     

    예제) 리스트 만들기

     

    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<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)); 
    setSize(300,300);
    setVisible(true);
    }
    public static void main(String [] args) {
    new ListEx();
    }
    }

     

     

    실행결과

     

     

     

     

     

    리스트의 아이템 변경

     

     

    JList의 특징

     

    JList(Vector listData)나 JList(Object [] listData)로 리스트가 생성되고 나면 벡터 나 배열을 수정해도 리스트 수정 안됨

    리스트를 수정하는 간단한 방법

    JList의 setListData()를 호출  리스트에 수정된 벡터나 배열을 새로 달아주는 방법

     

    Vector<String> v = new Vector<String>();
    v.add("황기태");
    v.add("이재문");
    JList<String> nameList = new JList<String>(v);
    // 벡터 v를 수정하고, 벡터 v를 리스트에 다시 달기
    v.add("김남윤");
    nameList.setListData(v);

     

     

    예제) 리스트의 아이템 변경

     

     

    package project;
    
    import javax.swing.*;
    import java.awt.event.*;
    import java.util.*;
    import java.awt.*;
    
    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);
    		
    		tf.addActionListener(new ActionListener() {
    			
    			@Override
    			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, 콤보박스 컴포넌트

     

     

    JComboBox

    콤보박스란?

    텍스트 필드와 버튼, 그리고 드롭다운 리스트로 구성

     

     

    생성자

     

     JComboBox<E>() 빈 콤보박스
      JComboBox<E>(Vector listData) 벡터로부터 아이템을 공급받는 콤보박스
       JComboBox<E>(Objext [] listData) 배열로부터 아이템을 공급받는 콤보박스

     

     

     

    예제)콤보박스 만들기

     

     

    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와 Action 이벤트

     

    콤보박스의 아이템 선택시 Action 이벤트 발생

    현재 선택된 아이템 알아내기

    JComboBox의 다음 메소드 활용

     

    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);
    strCombo.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    JComboBox<String> cb = (JComboBox<String>)e.getSource();
    int index = cb.getSelectedIndex();
    imgLabel.setIcon(images[index]);
    }
    });
    setSize(300,250);
    setVisible(true);
    }
    public static void main(String [] args) {
    new ComboActionEx();
    }
    }

     

     

     

     

     

     

     

    JSlider, 슬라이더

     

    마우스로 움직이면서 값을 선택하는 컴포넌트

     

     

     

    슬라이더 생성

     

    JSlider() 디폴트 슬라이더 생성
    JSlider(int orientation) orientation 방향의 슬라이더 생성
    JSlider(int min, int max, int val) 최소, 최대, 초기값
    JSlider(int orientation, int min, int max, int val)

     

     

     

    예제) 슬라이더 컴포넌트 만들고 모양을 제어하는 예제

     

    import javax.swing.*;
    import java.awt.*;
    public class SliderEx extends JFrame {
    public SliderEx() {
    setTitle("슬라이더 만들기 예제");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container c = getContentPane();
    c.setLayout(new FlowLayout());
    JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 200, 100);
    slider.setPaintLabels(true);
    slider.setPaintTicks(true);
    slider.setPaintTrack(true);
    slider.setMajorTickSpacing(50);
    slider.setMinorTickSpacing(10);
    c.add(slider);
    setSize(300,100);
    setVisible(true);
    }
    public static void main(String [] args) {
    new SliderEx();
    }
    }

     

     

    실행결과)

     

     

     

    JSlider와 Change 이벤트

     

    JSlider의 값(value)이 바뀌면 발생

    사용자가 슬라이더의 손잡이를 움직이는 경우

    JSlider의 setValue(int n)를 호출하여 값(value 필드)이 바뀌는 경우

     

    메소드

     

    void stateChanged(ChangeEvent e)
    컴포넌트의 상태가 변할 때 호출되며 changeEvent 객체를 인자로 전달받는다
    

     

     

    예제)JSlider와 Change이벤트를 활용한 색깔 다루기

     

    package project;
    
    import javax.swing.*;
    import java.awt.event.*;
    import java.util.*;
    import java.awt.*;
    
    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);
    		
    		tf.addActionListener(new ActionListener() {
    			
    			@Override
    			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();
    	}
    }
    

     

    실행결과)

     

    반응형

    댓글

Designed by Tistory.