Please Enable JavaScript!
Gon[ Enable JavaScript ]

자바(Java) AWT – List 컨트롤 구현 방법과 예제

자바(JAVA)
반응형

자바(Java) AWT – List 컨트롤 구현 방법과 예제

 

환경 : Eclipse Mars, Android 4.2.2, JDK 1.7

 

List 컨트롤은 여러 데이터를 관리할 때 쓰입니다. 컨트롤에 데이터를 넣고 빼는 방법과 멀티로 선택해서 값을 가져오는 방법에 대해 알아봅니다.

 

이번예제에서는 하나만 선택할수 있는 리스트와 멀티로 선택할수 있는 리스트 두개 입니다. 싱글리스트객체를 생성할때는 생성자 함수에 리스트 크기와 false 넘기면 됩니다. 그에 비해 멀리선택 리스트는 true 를 넘깁니다.

 

final List fruitList = new List(4, false);
fruitList.add("감자");
fruitList.add("고구마");
fruitList.add("보리");
fruitList.add("배추");

final List vegetableList = new List(4, true);
vegetableList.add("감");
vegetableList.add("배");
vegetableList.add("사과");
vegetableList.add("수박");

 

첫번째 버튼은 선택한 데이터의 값이 어떤 것인지 알아보는 것입니다. 싱글리스트는 getSelectedIndex() 함수를 이용해 리스트에서 선택한 데이터의 Index 값입니다. Index 값을 리턴받아 getItem() 함수의 인수로 넘기면 텍스트 값을 가져올수 있습니다.

 

showButton.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
		String data = "첫번째 선택한값 : " + 
				fruitList.getItem(
						fruitList.getSelectedIndex());
		
		data += ", 두번째 선택한값 : ";
		for (String vegetable : vegetableList.getSelectedItems()) {
			data += vegetable + " ";
		}
		statusLabel.setText(data);
	}
});

 

이벤트를 가져오기 위해서는 리스트컨트롤의 addActionListener() 함수에 ActionListener 객체를 등록해야 합니다. 리스트 컨트롤에 등록하는 ActionListener 객체의 기본함수인 actionPerformed() 입니다. 이함수에 리스트에서 선택했을 때 진행할 작업의 내용을 넣으면 됩니다.

 

멀티리스트에서 선택한 값을 가져오기 위해서는 for 문을 돌려야 합니다. getSelectedItems() 으로 String[] 배열을 리턴받아 하나씩 문자열로 만들면 되는 것이죠.

 

data += ", 두번째 선택한값 : ";
for (String vegetable : vegetableList.getSelectedItems()) {
	data += vegetable + " ";
}

 

이번에는 두번째 버튼의 삭제 기능입니다. 단일 선택 리스트 객체와 멀티 선택 리스트 객체 삭제방법은틀립니다. 단일선택은 getSelectedIndex() 으로 선택한 값의 Index 를 리턴하게 되고 멀티선택은 getSelectedIndexes() 함수로 여러 개 선택한 값들을 배열로 받게 됩니다. 삭제는 동일하게 remove() 함수로 합니다.

 

deleteButton.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
		// 단일 리스트 삭제 
		fruitList.remove(fruitList.getSelectedIndex());
		
		// 멀티 선택 리스트 삭제 
		int delCount = 0;
		for (int pos : vegetableList.getSelectedIndexes()) {
			vegetableList.remove(pos - delCount);
			delCount++;
		}
	}
});

 

이렇게 멀티와 단일로 선택할수 있는 리스트 컨트롤에 대한 전체 소스 값입니다.

 

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.List;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class AwtListControl {
	private Frame mainFrame;
	private Label headerLabel;
	private Label statusLabel;
	private Panel controlPanel, buttonPanel;

	public AwtListControl() {
		prepareGUI();
	}

	public static void main(String[] args) {
		AwtListControl awtControlDemo = new AwtListControl();
		awtControlDemo.showList();
	}

	private void prepareGUI() {
		// Frame 에 대한 셋팅
		mainFrame = new Frame("Java AWT 샘플");
		mainFrame.setSize(400, 400);
		mainFrame.setLayout(new GridLayout(4, 1));
		mainFrame.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent windowEvent) {
				System.exit(0);
			}
		});

		// 상단에 있는 라벨
		headerLabel = new Label();
		headerLabel.setAlignment(Label.CENTER);
		headerLabel.setText("Control Test : List");

		// 하단 상태값 라벨
		statusLabel = new Label();
		statusLabel.setText("Status Lable");
		statusLabel.setAlignment(Label.CENTER);
		statusLabel.setSize(350, 100);

		controlPanel = new Panel();
		controlPanel.setLayout(new FlowLayout());
		
		buttonPanel = new Panel();
		buttonPanel.setLayout(new FlowLayout());

		mainFrame.add(headerLabel);
		mainFrame.add(controlPanel);
		mainFrame.add(buttonPanel);
		mainFrame.add(statusLabel);
		mainFrame.setVisible(true);
	}

	private void showList() {

		final List fruitList = new List(4, false);
		fruitList.add("감자");
		fruitList.add("고구마");
		fruitList.add("보리");
		fruitList.add("배추");

		final List vegetableList = new List(4, true);
		vegetableList.add("감");
		vegetableList.add("배");
		vegetableList.add("사과");
		vegetableList.add("수박");

		Button showButton = new Button("선택한값보기");
		Button deleteButton = new Button("선택한삭제");
		
		showButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String data = "첫번째 선택한값 : " + 
						fruitList.getItem(
								fruitList.getSelectedIndex());
				
				data += ", 두번째 선택한값 : ";
				for (String vegetable : vegetableList.getSelectedItems()) {
					data += vegetable + " ";
				}
				statusLabel.setText(data);
			}
		});
		
		deleteButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 단일 리스트 삭제 
				fruitList.remove(fruitList.getSelectedIndex());
				
				// 멀티 선택 리스트 삭제 
				int delCount = 0;
				for (int pos : vegetableList.getSelectedIndexes()) {
					vegetableList.remove(pos - delCount);
					delCount++;
				}
			}
		});

		controlPanel.add(fruitList);
		controlPanel.add(vegetableList);
		buttonPanel.add(showButton);
		buttonPanel.add(deleteButton);

		mainFrame.setVisible(true);
	}
}

 

아래는 소스를 실행했을 때 화면입니다. 왼쪽은 단일 선택 리스트이며 오른쪽은 멀티선택 리스트입니다. 선택해서 [선택한값보기] 를 누르게 되면 아래에 선택한 값들에 대해 표시가 됩니다.

 

자바(Java) AWT – List 컨트롤 구현 방법과 예제

 

반응형
Posted by 녹두장군1
,