본문 바로가기
인턴

[인턴 OJT 10일차] 스윙 주소록 저장, 수정, 삭제 / JTree, Thread 정리

by 리잼 2022. 12. 23.
반응형

 

수정할 일이 없는 seqNum에 setEnable(false) 옵션을 넣어 입력칸 비활성화

 

TextFiled 초기화

	public void textFieldReset() {
		jTextField_seqNum.setText(null);
		jTextField_Name.setText(null);
		jTextField_Birthday.setText(null);
		jTextField_gender.setText(null);
		jTextField_phoneNumber.setText(null);
		jTextField_address.setText(null);
	}
 

setData로 null 값을 줘서 초기화 해주는 기능

 

Swing 주소록 저장기능

public void jButton_Save_actionPerformed(ActionEvent e) {
		String name = jTextField_Name.getText();
		String birthday= jTextField_Birthday.getText();
		String gender = jTextField_gender.getText();
		String phoneNumber = jTextField_phoneNumber.getText();
		String address = jTextField_address.getText();
		
		AddressBookVo data = new AddressBookVo(); // 객체 생성 후 입력 값 SET
		data.setName(name);
		data.setBirthday(birthday);
		data.setGender(Gender.getGender(gender));
		data.setPhoneNumber(phoneNumber);
		data.setAddress(address);
		
		try {			
			addressBook.insertAddressBook(data); // 가져온 데이터로 insert 쿼리 실행
			initData();							 // insert 후 데이터 조회
			textFieldReset();				 	 // tesxtFiled 초기화	
		}
		catch (Exception ex) {
			LOGGER.debug(ex.getMessage(), ex);
		}
		
	}
 

수정 기능

DB 컬럼값과 필드 속성을 일치시키고 getText로 불러온 후

Vo로 객체화 하여 data에 넘겨준 후 update 쿼리 실행

삭제 기능

	public void jButton_Delete_actionPerformed(ActionEvent e) {
		int seqNum = Integer.parseInt(jTextField_seqNum.getText()); // 삭제시 필요한 seqNum 만 받아온다
		AddressBookVo data = new AddressBookVo();
		data.setSeqNum(seqNum);
		
		try {
			addressBook.deleteAddressBook(data);	
			initData();
			textFieldReset();
		}
		catch (Exception ex) {
			LOGGER.error(ex.getMessage(), ex);
		}
		
	}
 

JTree

 

- 계층적인 데이트를 표시하는데 사용되는 컴포넌트

- 단순하게 데이터 뷰만 제공된다고 생각하면 된다.

- 트리는 각각 하나의 루트노드를 가지고 있으며, 루트 노드에서 자식노드를 파생시킨다.

JTree 컴포넌트

JTree
생성자
JTree()
비어있는 트리를 생성한다.
JTree(TreeNode root)
매개변수로 주어진 노드를 루트 노드로 하는 트리를 생성한다.
메소드
void setVisibleRowCount(int row)
화면에 나타나는 행의 수를 설정한다.
Object getLastSelectedPathComponent()
현재 선택된 노드를 반환한다.
ThreeSelectionModel getSelectionModel()
트리의 선택 모델을 반환한다.
Object getUserObject()
노드로 지정된 객체를 반환한다.
보통 이벤트 처리 시 노드의 이름을 가져올 때 사용한다.
노드 생성자
DefaultMutableTreeNode()
비어있는 트리 노드를 생성한다.
DefaultMutableTreeNode(Object obj)
지정된 객체를 가지고 트리 노드를 생성한다.
노드 수정 메소드
void add(TreeNode child)
자식 노드를 추가한다.
TreeNode getFirstChild()
현재 노드의 첫 번째 자식 노드를 반환한다.
DefaultMutableTreeNode getNextSibling()
현재 노드의 다음 형제 노드를 반환한다.
TreeNode getParent()
현재 노드의 부모 노드를 반환한다.
이벤트 처리
addTreeSelectionListener(리스너 타입)
노드를 선택할 때마다 트리 선택 이벤트(TreeSelectionEvent)가 발생하며, TreeSelectionListener 인터페이스를 구현함으로서 이벤트를 처리한다.

스크롤페인(scroll pane)

컴포넌트에 스크롤 기능을 제공한다. 화면보다 더 큰 컴포넌트를 표시하기 위해서는 스크롤 기능이 필요하다.

JSplitPane

- 2개의 component를 분할하는 용도로 사용한다.

jSplitPane.setLeftComponent(jScrollPane_Tree);
jSplitPane.setRightComponent(jScrollPane_Table);
 

트리를 왼쪽으로, 테이블을 오른쪽으로 지정한 코드

 

DefaultTreeModel

- 루트노드 생성자이다. (rootnode)

 

setRootVisible

- root node를 숨기거나 보이게 할 수 있다.

TreeNode를 마무리 지을땐 reload를 불러줘야 한다.

Thread

- 프로그램 내에서 실행되는 프로그램 제어 흐름(실행단위)을 말한다

- 한 프로그램에서 여러개의 스레드가 존재할 수 있다. 스레드가 1개라면 단일 스레드, 2개이상이라면 다중 스레드

- 프로그램을 실행하는 주체이다

- 보통 가벼운 프로세스라고 표현한다

 

Multi-Thread ( 다중 스레드 )

- 멀티스레드는 여러개의 스레드를 이용하는 프로그램이다.

- 다중 스레드에서 각각의 스레드는 하나의 독립적인 프로세스처럼 작업 수행

 

스레드 생성하기

생성자
내용
Thread()
일반적인 스레드 객체 생성
Thread-n 이런 이름을 가진 스레드가 만들어진다
Thread(Runnable target)
run 메서드를 가지는 객체를 인자값으로 할당하기
Thread(Runnable target, String name)
run 메서드를 가지는 객체와 스레드 이름을 인자값으로 할당하기
Thread(String name)
스레드 생성하면서 스레드 이름 지어주기

- Thread 클래스 상속 받아 Thread 생성하기

package test;

class Thread1 extends Thread {
	@Override
	public void run() {
		
	}
}

public class ThreadTest1  {
	
	public static void main(String[] args) {
		Thread1 thread1 = new Thread1();
		thread1.start(); // thread1 의 run 메소드가 실행된다.
	}

}
 

보통 상속받아서 run오버라이드 된 곳이 호출된다 프로세스가 런에있는 내용을 수행함

 

- Runnable 인터페이스 구현하여 thread 생성하기

class Thread2 implements Runnable {
	public void run() {
		// 작업 할 내용
	}
}

public class ThreadTest1  {
	
	public static void main(String[] args) {
		Thread2 thread2 = new Thread2();
		Thread thread = new Thread(thread2);
		thread.start(); // thread2 의 run 메소드가 실행된다.
	}

}
쓰레드의경우 각각의 데몬으로 실행되기 때문에 실행값이 다 다르다 >> 병렬처리

Timer, TimerTask

- Timer는 TimerTask가 특정 시간에 실행되도록 할 수 있다.

- 일정 주기로 실행도 가능

- 1s = 1000ms

		Timer timer = new Timer();
		for (int i = 0; i < 3; i++) {
			TestTimerTask t = new TestTimerTask(i);
			
//			timer.schedule(t, 0, 1000L); // 1초마다 실행
			timer.scheduleAtFixedRate(t, 0, 1000L);
			
			LOGGER.debug(String.format("[%d] activeCount:%d", 0, Thread.activeCount()));
		}
 

 

좌 - 스케쥴러 // 우 - 스케쥴러atfixedrate

- Schedule(TimerTask task, Date time) : 설정한 time시간에 설정한 task 작업 수행한다.

- ScheduleFixedRate(TimerTask task, Date firstTime, long period) : 지정한 시간 부터 일정한 간격으로 task를 수행한다.

- 정확한 주기가 필요하면 fiexdrate를 사용하고 그렇지 않으면 schedule을 사용한다

 

그래픽 프로그래밍

paintComponent(Graphics g)

: JComponent method로 swing 컴포넌트가 자신의 모양을 다시 그릴 필요가 있을 때마다 호출되는 method이다.

: 그림을 그리는 코드에서는 반드시 필요한 method이다.

: 매개변수로 주어지는 Graphics 객체는 해당 프레임의 그래픽 객체이다.

Graphics 클래스

- 그림을 그리는데 필요한 모든 설정값과 그림을 그리는 method를 가지고 있다.

repaint()

- paintComponent method는 사용자가 아닌 자동적으로 호출되어야 한다.

따라서 사용자가 화면을 다시 그리고 싶다면 repaint()를 호출하면 된다.

 

반응형