JSpinner




스피너는 두 개의 화살표가 붙은 텍스트 필드이다.

 

텍스트 필드는 숫자를 표현하고 있고 사용자는 화살표를 클릭하여 값들을 증가 또는 감소시킬 수 있다.

 

주로 지정된 범위에서 개수를 정하거나날짜를 선택할 때 사용한다그 외 다른 용도로도 사용가능하다.

 

JSpinner

 생성자

  JSpinner()

  정수를 가지고 있는 SpinnerNumberModel이 초기값으로 0이 되어 새로운 스피너 객체를 생성한다.

  JSpinner(SpinnerModel sm)

 새로운 스피너 모델을 지정받은 스피너 객체를 생성한다.

 메소드

  void setValue(Object obj)

 값을 설정한다.

  Object getValue()

 선택된 값을 반환한다.

  Object getNextValue() 

 선택된 값의 다음 값을 반환한다.

  Object getPreviousValue()

 선택된 값의 이전 값을 반환한다.


 

스피너 모델(SpinnerModel를 상속받는다.)


String[] names = {“김철수”, “김영희”, “김숙자”, “김자몽”};

SpinnerListModel listModel = new SpinnerListModel(names);

 

SpinnerNumberModel numberModel = new SpinnerNumberModel(0, 1, 2, 3, 4, 5);


//최소날짜(start)와 최대날짜(end)를 지정할 수 있다. Calendar 객체는 증가&감소가 된다.

SpinnerDataModel dateModel = new SpinnerDateModel(value, start, end, Calendar.YEAR); 


- 스피너 모델은 총 4가지가 있다.

  • AbstractSpinnerModel

  • SpinnerDateModel

  • SpinnerListModel

  • SpinnerNumberModel







- JSpinner 예제

 

public class SpinnerTest extends JFrame {

	//FIELDS
	private String[] name = {"김철수", "김숙자", "김영희", "김자몽"};
	private JPanel panel = new JPanel();
	private JSpinner spinner;

	//CONSTRUCTOR
	SpinnerTest() {
		setTitle("스피너 예제");
		setSize(500, 200);
		setDefaultCloseOperation(JFrame.EXITE_ON_CLOSE);

		// List Model
		SpinnerListModel listModel = new SpinnerListModel(name);
		spinner = new JSpinner(listModel);
		panel.add(spinner);

		// Number Model
		SpinnerNumberModel numberModel = new SpinnerNumberModel(1, 2, 3, 4, 5, 6);
		spinner = new JSpinner(numberModel);
		panel.add(spinner);

		// Date Model
		Calendar calendar = Calendar.getInstance(); //갤린더 객체 얻기
		Date value = calendar.getTime(); //현재 시간 얻기
		
		calendar.add(Calendar.YEAR, -50); // 50년 전의 날짜 얻기
		Date start = calendar.getTime(); //50년 전의 날짜를 최소 날짜로 지정
		
		calendar.add(Calendar.YEAR, 100); // 50년 뒤의 날짜 얻기 +50하면 현재날짜가됨.
		Date end = calendar.getTime(); //50년 뒤의 날짜를 최대 날짜로 지정

		SpinnerDateModel dateModel = new SpinnerDateModel(value, start, end, Calnedar.YEAR);
		spinner = new JSpinner(datemodel);
		spinner.setEditor(new JSpinner.DateEditor(spinner, "yyyy/MM/dd")); //날짜 편집기 지정
		panel.add(spinner);

		add(panel);
		setVisible(true);
	}

	//METHODS
	public static void main(String[] args) {
		new SpinnerTest();
	}
}


'Programming Language > JAVA' 카테고리의 다른 글

29. JTree - 트리  (0) 2017.06.29
28. JSlider - 슬라이더  (0) 2017.06.29
26. JComboBox - 콤보박스  (0) 2017.06.29
25. JList - 리스트  (0) 2017.06.25
24. JScrollPane - 스크롤 페인  (0) 2017.06.25

 



 JComboBox

 



리스트처럼 여러 항목 중에서 하나를 선택하는데 사용할 수 있다차이가 있다면단 하나만 선택할 수 있다는 것이다.

 

콤보 박스는 리스트와 텍스트 필드가 결합된 형태로 보면 된다.

 

텍스트 필드가 결합된 형태라 하더라도 수정할 수 없으며 선택 여부만 결정한다.

 


JComboBox

 생성자

  JComboBox()

  리스트가 없는 빈 콤보 박스를 생성한다.

 메소드

  void addItem(Object obj)

  현재 위치의 앞에 콤보 박스에 지정된 객체를 추가한다.

  void insertItemAt(Object obj, int index)

  지정된 위치에 객체를 삽입한다.

  Object getItemAt(int index)

  콤보 박스의 해당 인덱스를 가진 선택 항목을 가져온다.

  Object getSelectedItem()

  콤보 박스에서 선택한 항목을 가져온다.

  void removeAllItems() 

  모든 항목을 삭제한다.

  void removeItemAt(int index)

  해당 인덱스의 항목을 삭제한다.

  void removeItem(Object obj) 

  지정된 객체를 삭제한다.

  int getItemCount()

  항목의 개수를 반환한다.

  void setEditable(boolean editable) 

  콤보 박스에 사용자가 입력할 수 있는지 설정한다.

  boolean isEditable()   콤보 박스에 사용자의 입력 여부를 반환한다.

 이벤트 처리

  void addActionListener(ActionListener al)  사용자가 콤보 박스에서 항목을 선택했을 경우또는 사용자가 엔터키를 눌렀을 때 발생하는 액션 이벤트를 처리한다.
  void addItemListener(ItemListener il)

   아이템 리스너를 추가한다리스너의 itemStateChanged() 메소드를 호출하여 항목의 선택 상태가 변경되면 호출된다.



아래의 사이트에 들어가게 되면 더 많은 정보를 접할 수 있다.








 

 

JList

 

여러 개의 선택 항목 중에서 하나를 선택하기 위한 컴포넌트

 

리스트는 한 줄에 하나씩 선택 항목을 나타내며 화면은 스크롤이 가능하다.

 

사용자가 마우스로 선택한 항목을 더블 클릭하거나 엔터 키를 눌렀을 때 액션 이벤트가 발생한다.

 

생성자의 매개변수로 받을 ListModel은 디폴트일 경우 변경이 불가하여, 리스트에 항목을 추가하거나 삭제할 수 없다.

 

개별적으로 변경될 수 있는 리스트를 생성하기 위해서는 리스트 모델을 DefaultListModel의 인스턴스로 변경하여야 한다. 이는 setModel() 메소드를 호출함으로서 가능하다.

 

생성자

 JList() 

 빈 리스트를 생성한다.

 JList(Object[] items)

 매개변수로 받은 배열에 있는 값들을 가진 리스트를 생성한다.

 JList(ListModel list)

 지정된 리스트 모델을 사용하는 리스트를 생성한다.

 JList(Vector[] items) 

 벡터에 있는 값들을 가지고 선택항목을 생성한다.


- 선택 모드 : 디폴트값은 다중 구간 선택이다.

  • SINGLE_SELECTION : 단일 선택으로, 한 번에 하나의 항목만이 선택된다.

  • SINGLE_INTERVAL_SELECTION : 단일 구간 선택으로, 여러 개의 연속적인 항목들이 선택될 수 있다. 처음 클릭한 항목에서 쉬프트 키(Shift)를 누른 채로 원하는 범위의 항목(마지막 항목)까지 선택할 수 있다.

  • MULTIPLE_INTERVAL_SELECTION : 다중 구간 선택으로, 디폴트로 항목들이 자유롭게 선택될 수 있다. 연속적이지 않더라도 컨트롤 키(Ctrl)를 누른 채로 클릭하는 항목들은 모두 선택된다.


선택 모드를 변경하고 싶으면 setSelectionMode() 메소드를 호출하여 매개변수로 아래의 선택 모드 중 하나를 지정하면 된다.

  • ListSelectionModel.SINGLE_SELECTION

  • ListSelectionModel.SINGLE_INTERVAL_SELECTION

  • ListSelectionModel.MULTIPLE_INTERVAL_SELECTION

 

String[] listStr= { “김철수”, “김영희”, “김숙자”, “김자몽” };

JList myList= new JList(listStr); //생성자로 선택항목을 넘기는 것이 가장 일반적인 방법

myList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);


 

이벤트 처리 : 리스트의 항목이 선택되면 리스트 선택 이벤트(ListSelectionEvent)가 발생한다. 해당 이벤트를 처리하려면 리스트 선택 리스너(ListSelectionListener) 인터페이스를 구현함으로써 해결할 수 있다. 리스트 선택 리스너에는 아래의 메소드 하나만 구현하면 된다.


@Override

public void valueChanged(ListSelectionEvent e) {

if (list.getSelectedIndex() == -1) { //getSelectedIndex() : 선택한 항목 인덱스 값 반환

//선택이 되지 않은 경우

} else { //선택되지 않은 경우 1을 반환한다.

//선택이 된 경우

}

 

if (list.getSelectedItem().equals(name) { //getSelectedItem() : 선택한 항목의 이름 반환

// 항목 이름이 name인 선택된 경우

} else {

// 선택되지 않았거나선택된 항목 이름이 name이 아닌 경우

}

 

if (list.getSelectedValue()!=null) { //getSelectedValue() : 선택된 항목(Object 타입반환

//하나라도 선택된 경우

} else {

//하나도 선택되지 않은 경우

}

}


 

경계선 만들기 : 다른 컴포넌트에도 있는 메소드이다. 숫자 1은 선의 굵기이다.

 

myList.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));

 

화면에 표시되는 행 수 설정 : 스크롤 바 추가를 위해 행 수를 설정하는 것이 좋다.

 

listStr.setVisibleRowCount(10);

JScrollPane scrollPane = new JScrollPane(listStr);

scrollPane.setPreferredSize(new Dimension(300, 300)); //사이즈 설정

panel.add(scrollPane); //꼭 필요한 과정자주 까먹는 부분이니 주의바람.

 


리스트 항목 추가 : 디폴트 리스트 모델은 변경할 수 없기 때문에 새로운 DefaultListModel 인스턴스를 생성하여 생성자의 매개변수로 전달하여야 한다.

 

DefaultListModel model = new DefaultListModel();

model.addElement(“김철수”);

model.addElement(“김영희”);

model.addElement(“김숙자”);

model.addElement(“김자몽”);


JList myList = new JList(model); 


//또는


JList myList = new JList();

myList.setModel(model);

 

리스트 항목 제거

 

int index = 2;

model.remove(index); //위의 순서에서 인덱스가 2인 김숙자가 리스트에서 삭제된다.

 

-리스트 항목 삽입

 

model.insertElementAt("김커피", 1); //인덱스 1인 "김영희" 위치에 "김커피" 삽입된다.



- JList 예제

public class ListTest extends JFrame implements addListSelectionListener{

	//FIELDS
	private JLabel = new JLabel();
	private JTextField selectedList = new JTextField(10); //10글자까지 가능
	private JPanel listPanel = new JPanel();
	private JPanel labelPanel = new JPanel();
	private JList list;
	private JScrollPane scroll;
	private String[] names = {"김철수", "김영희", "김숙자", "김자몽"};

	//CONSTRUCTOR
	public ListTest() {
		setTitle("리스트 예제");
		setSize(500, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //프레임을 껐을 때 완전한 종료
		
		list = new JList(names);

		//리스트의 경계선 설정
		list.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));

		//리스트에 스크롤바 추가
		scroll = new JScrollPane(list);
		scroll.setPreferredSize(new Dimension(300, 300));

		//리스트의 단일 선택 모드 변경
		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		
		//리스트 선택 리스너 등록
		list.addListSelectionListener(this);

		label.setText("선택된 항목 : ");
		selectedList.setEditable(false); //텍스트 필드 수정 불가상태로 바꾸기

		listPanel.add(scroll); //리스트를 패널에 추가
		labelPanel.add(label); //라벨을 패널에 추가
		labelPanel.add(selectedList); //텍스트 필드를 패널에 추가

		add(listPanel, BorderLayout.CENTER); //프레임 중앙에 리스트를 배치
		add(labelPanel, BorderLayout.SOUTH); //프레임 하단에 라벨과 텍스트 필드 배치

		setVisible(true);
	}

	//METHODS
	@Override
	public void valueChanged(ListSelectionEvent e) {
		// 선택된 이름 얻기
		String name = (String) list.getSelectedValue();

		selectedList.setText(name);
	}

	public static void main(String[] args) {
		ListText listFrame = new ListTest();
	}
}







 

 

 

JScrollPane

 

스크롤 페인은 일반 컨테이너에 해당된다.

 

스크롤 페인(scroll pane)은 컴포넌트에 스크롤 기능을 제공한다.

 

제한되어 있는 화면에 화면보다 더 큰 컴포넌트를 표시하기 위해 스크롤 기능을 추가한 패널인데, 주로 트리(JTree), 테이블(JTable), 리스트(JList), 텍스트 영역(JTextArea)와 함께 사용된다.

 

위에 언급한 컴포넌트를 스크롤 페인의 생성자 매개변수로 넘겨주면 된다.

 

JTextArea textArea = new JTextArea(“연습용”);

JScrollPane scroll = new JScrollPane(textArea);


 

일반적으로 스크롤 페인을 프레임이나 패널에 추가하여 애플리케이션 상에 나타낸다.

 

JTextArea textArea = new JTextArea(“연습용”);

JScrollPane scroll = new JScrollPane(textArea);

JPanel panel = new JPanel();

...

panel.add(scroll);


 JScrollPane

 생성자

 JScrollPane()

 스크롤 페인 생성

 JScrollPane(Component component)

 해당 컴포넌트를 포함한 스크롤 페인 생성

 JScrollPane(int h, int v)

 수직과 수평 방향의 스크롤 바 정책을 매개변수로 받은 스크롤 페인 생성

 JScrollPane(Component comp, int h, int v)

 위의 두 매개변수를 합친 스크롤 페인 생성

 메소드

 void setViewportView(Component comp)

 스크롤 페인의 클라이언트를 설정한다.

 void setVerticalScrollBarPolicy(int policy)

 수직 방향의 정책을 설정하거나 반환한다.

 int getVerticalScrollBarPolicy() 

 아래와 같은 값을 기본정책으로 가진다.


VERTICAL_SCROLLBAR_AS_NEEDED 

필요할 때만 스크롤 바 표시(디폴트)


VERTICAL_SCROLLBAR_ALWAYS 

항상 스크롤 바 표시


VERTICAL_SCROLLBAR_NEVER 

절대 스크롤 바를 표시하지 않음

 void setHorizontalScrollBarPolicy(int policy)

  수평 방향의 정책을 설정하거나 반한한다.

 int getHorizontalScrollBarPolicy()

 아래와 같은 값을 기본정책으로 가진다.


HORIZONTAL_SCROLLBAR_AS_NEEDED

(디폴트) 필요할 때만 스크롤 바 표시


HORIZONTAL_SCROLLBAR_ALWAYS 

항상 스크롤 바 표시


HORIZONTAL_SCROLLBAR_NEVER 

절대 스크롤 바를 표시하지 않음



 

 



 

+ Recent posts