수정할 일이 없는 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()));
}
- 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()를 호출하면 된다.
'인턴' 카테고리의 다른 글
[인턴 OJT 12일차] JTree 주소록 저장, 수정, 삭제, 초기화 기능 추가 (0) | 2022.12.30 |
---|---|
[인턴 OJT 11일차] Swing 아날로그 시계 구현, JTree 주소록 (0) | 2022.12.30 |
[인턴 OJT 9일차] Java Swing (0) | 2022.12.23 |
[인턴 OJT 8일차] Java swing Jframe, Jpanel, Layout (0) | 2022.12.21 |
[인턴 OJT 7일차] mybatis (0) | 2022.12.21 |