9:25 경 도착 ㅎ
2024년 마지막 날 아침, 일어나기 힘들었는데 지지 않고 일어났다(물론 여러번 알람을 미루긴 했지만 원래 일찍 일어나던 사람이라 참 다행이다 그렇게 미뤄도 늦지 않았어)
어제 계획했던 건 못하겠지만..
오늘 밤에 혼자 무뼈 닭발이랑 계란찜이랑 주먹밥이랑 맥주 사다가 잔뜩 먹을 생각하니까 벌써 신난다 꺄르륵
<9:30 1교시>
html과 자바스크립트, css 만로 git의 작동 원리를 만들어 놓은거... 대단하다...(변태들)
git fetch 화면에서 origin/dev 와 origin/master 두 가지의 원격 브랜치가 있길래 git push에서 시도해봤더니 이 페이지에서는 지원을 하지 않는 다는 것 같은데, 이 시뮬레이션 환경 말고 실제로 git 에서는 가능할지 궁금하다.
git rebase master
내가 지저분하게(?) 여러 갈래 가지치기 한 이력을 rebase 해서 하나의 가지로 다시 합쳐 버릴 수 있음(충돌이 많이 일어날 수 있음)
git push 하기 전에 누군가 origin/master에 변경한 사항이 있을 수 있는 것을 fetch+merge 또는 pull 해서 해결하고 push 해야 한다.
git 존잼이네 ㅎㅎ
이제 개발만 제대로 하면 되겠당 ㅎㅎㅎ
<10:30 2교시>
package test.frame;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MemberFrame extends JFrame implements ActionListener{
//필요한 필드 정의하기
JTextField inputName, inputAddr;
//생성자
public MemberFrame(String title) {
super(title);
//레이아웃 설정
setLayout(new BorderLayout());
//JLabel 2개
JLabel label2= new JLabel("이름");
JLabel label3= new JLabel("주소");
//JTextField 1개
inputName = new JTextField(10);
inputAddr = new JTextField(10);
//JButton
JButton addBtn=new JButton("추가");
//패널에 UI 배치(add는 패널의 메소드)
JPanel panel =new JPanel();
panel.add(label2);
panel.add(inputName);
panel.add(label3);
panel.add(inputAddr);
panel.add(addBtn);
//패널의 배경색 설정
panel.setBackground(Color.orange);
//패널을 프레임의 위쪽에 배치
add(panel, BorderLayout.NORTH);
//버튼에 액션 리스너 등록
addBtn.addActionListener(this);
}
public static void main(String[] args) {
MemberFrame f=new MemberFrame("회원 정보 관리");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//가독성 좋게+부모자식이라 JFrame.생략하고
f.setBounds(100,100,800,500);
f.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
//입력한 이름과 주소를 읽어 온다
String name=inputName.getText();//this. 이 생략되어 있는데 JTextField의 참조값이 필드에 저장되어 있어서 생략됨
String addr=inputAddr.getText();//this. 이 생략되어 있는데 JTextField의 참조값이 필드에 저장되어 있어서 생략됨
//입력한 이름과 주소를 MEmebrDto 객체에 담는다
MemberDto dto=new MemberDto();
dto.setName(name);
dto.setAddr(addr);
//MemberDao 객체를 생성해서
MemberDao dao=new MemberDao();
//insert() 메소드를 이용해서 회원 정보를 DB에 저장한다
dao.insert(dto);
}
}
테이블도 만들음. 다음 교시에 테이블에 출력하는거 이어서 할거임.
여기까지의 코드 백업
package test.frame;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MemberFrame extends JFrame implements ActionListener{
//필요한 필드 정의하기
JTextField inputName, inputAddr;
//생성자
public MemberFrame(String title) {
super(title);
//레이아웃 설정
setLayout(new BorderLayout());
//JLabel 2개
JLabel label2= new JLabel("이름");
JLabel label3= new JLabel("주소");
//JTextField 1개
inputName = new JTextField(10);
inputAddr = new JTextField(10);
//JButton
JButton addBtn=new JButton("추가");
//패널에 UI 배치(add는 패널의 메소드)
JPanel panel =new JPanel();
panel.add(label2);
panel.add(inputName);
panel.add(label3);
panel.add(inputAddr);
panel.add(addBtn);
//패널의 배경색 설정
panel.setBackground(Color.orange);
//패널을 프레임의 위쪽에 배치
add(panel, BorderLayout.NORTH);
//버튼에 액션 리스너 등록
addBtn.addActionListener(this);
//회원 목록을 출력할 테이블
JTable table=new JTable();
//테이블의 칼럼명을 배열로 미리 준비한다
String[] colNames= {"번호", "이름", "주소"};
//테이블에 연결할 모델 객체
DefaultTableModel model =new DefaultTableModel();
model.setColumnIdentifiers(colNames);
model.setRowCount(0);
//모델을 테이블에 연결
table.setModel(model);
//스크롤이 가능하도록 테이블을 JScrollPane에 감싼다
JScrollPane scroll=new JScrollPane(table);
//JScrollPnae을 프레임의 가운데에 배치하기
add(scroll, BorderLayout.CENTER);
}
public static void main(String[] args) {
MemberFrame f=new MemberFrame("회원 정보 관리");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//가독성 좋게+부모자식이라 JFrame.생략하고
f.setBounds(100,100,800,500);
f.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
//입력한 이름과 주소를 읽어 온다
String name=inputName.getText();//this. 이 생략되어 있는데 JTextField의 참조값이 필드에 저장되어 있어서 생략됨
String addr=inputAddr.getText();//this. 이 생략되어 있는데 JTextField의 참조값이 필드에 저장되어 있어서 생략됨
//입력한 이름과 주소를 MEmebrDto 객체에 담는다
MemberDto dto=new MemberDto();
dto.setName(name);
dto.setAddr(addr);
//MemberDao 객체를 생성해서
MemberDao dao=new MemberDao();
//insert() 메소드를 이용해서 회원 정보를 DB에 저장한다
dao.insert(dto);
}
}
<11:30 3교시>
package test.frame;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MemberFrame extends JFrame implements ActionListener{
//필요한 필드 정의하기
JTextField inputName, inputAddr;
//생성자
public MemberFrame(String title) {
super(title);
//레이아웃 설정
setLayout(new BorderLayout());
//JLabel 2개
JLabel label2= new JLabel("이름");
JLabel label3= new JLabel("주소");
//JTextField 1개
inputName = new JTextField(10);
inputAddr = new JTextField(10);
//JButton
JButton addBtn=new JButton("추가");
//패널에 UI 배치(add는 패널의 메소드)
JPanel panel =new JPanel();
panel.add(label2);
panel.add(inputName);
panel.add(label3);
panel.add(inputAddr);
panel.add(addBtn);
//패널의 배경색 설정
panel.setBackground(Color.orange);
//패널을 프레임의 위쪽에 배치
add(panel, BorderLayout.NORTH);
//버튼에 액션 리스너 등록
addBtn.addActionListener(this);
//회원 목록을 출력할 테이블
JTable table=new JTable();
//테이블의 칼럼명을 배열로 미리 준비한다
String[] colNames= {"번호", "이름", "주소"};
//테이블에 연결할 모델 객체
DefaultTableModel model =new DefaultTableModel();
model.setColumnIdentifiers(colNames);
model.setRowCount(0);
//모델을 테이블에 연결
table.setModel(model);
//스크롤이 가능하도록 테이블을 JScrollPane에 감싼다
JScrollPane scroll=new JScrollPane(table);
//JScrollPnae을 프레임의 가운데에 배치하기
add(scroll, BorderLayout.CENTER);
//프레임 객체가 생성되는 시점에 DB에 있는 내용을 읽어와서 출력할 수 있게 해준다.
//JTable에 출력할 sample row 데이터
//Object[] row= {1, "글린다", "오즈"};
//테이블에 연결된 모델에 row 추가하기
//model.addRow(row);
//테이블에 출력할 회원 목록 얻어오기
MemberDao dao = new MemberDao();
List<MemberDto> list= dao.getList();
//반복문 돌면서
for (MemberDto tmp:list ) {
//MemberDto 객체에 담긴 회원정보를 이용해서 Object[] 에 담은 다음
Object[] rowData = {tmp.getNum(), tmp.getName(), tmp.getAddr()};
//테이블에 연결된 모델에 추가하기
model.addRow(rowData);
}
}//생성자 : 프레임 객체가 생성되는 시점에 만들어짐
public static void main(String[] args) {
MemberFrame f=new MemberFrame("회원 정보 관리");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//가독성 좋게+부모자식이라 JFrame.생략하고
f.setBounds(100,100,800,500);
f.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
//입력한 이름과 주소를 읽어 온다
String name=inputName.getText();//this. 이 생략되어 있는데 JTextField의 참조값이 필드에 저장되어 있어서 생략됨
String addr=inputAddr.getText();//this. 이 생략되어 있는데 JTextField의 참조값이 필드에 저장되어 있어서 생략됨
//입력한 이름과 주소를 MEmebrDto 객체에 담는다
MemberDto dto=new MemberDto();
dto.setName(name);
dto.setAddr(addr);
//MemberDao 객체를 생성해서
MemberDao dao=new MemberDao();
//insert() 메소드를 이용해서 회원 정보를 DB에 저장한다
dao.insert(dto);
}
}
나는 아직도 확장 for 문을 제대로 돌릴줄 모른다 ㅠㅠ 그게 안되니까 그 이후도 안 됨 ㅠㅠ
//테이블에 출력할 회원 목록 얻어오기
MemberDao dao = new MemberDao();
List<MemberDto> list= dao.getList();
//반복문 돌면서
for (MemberDto tmp:list ) {
//MemberDto 객체에 담긴 회원정보를 이용해서 Object[] 에 담은 다음
Object[] rowData = {tmp.getNum(), tmp.getName(), tmp.getAddr()};
//테이블에 연결된 모델에 추가하기
model.addRow(rowData);
}
참조값으로 사용할 수가 없어진 model을 필드로 바꾸기(생성자에서 생성된 이 객체의 참조값이 다른 메소드에서도 필요한 상황 -> 이 값을 지역 변수가 아닌 필드로 옮기기)
동일한 코드 블록은 메소드 안에 집어 넣고 필요한 곳에서 그 메소드를 콜하는 구조로 만들기
package test.frame;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MemberFrame extends JFrame implements ActionListener{
//필요한 필드 정의하기
JTextField inputName, inputAddr;
DefaultTableModel model;
//생성자
public MemberFrame(String title) {
super(title);
//레이아웃 설정
setLayout(new BorderLayout());
//JLabel 2개
JLabel label2= new JLabel("이름");
JLabel label3= new JLabel("주소");
//JTextField 1개
inputName = new JTextField(10);
inputAddr = new JTextField(10);
//JButton
JButton addBtn=new JButton("추가");
//패널에 UI 배치(add는 패널의 메소드)
JPanel panel =new JPanel();
panel.add(label2);
panel.add(inputName);
panel.add(label3);
panel.add(inputAddr);
panel.add(addBtn);
//패널의 배경색 설정
panel.setBackground(Color.orange);
//패널을 프레임의 위쪽에 배치
add(panel, BorderLayout.NORTH);
//버튼에 액션 리스너 등록
addBtn.addActionListener(this);
//회원 목록을 출력할 테이블
JTable table=new JTable();
//테이블의 칼럼명을 배열로 미리 준비한다
String[] colNames= {"번호", "이름", "주소"};
//테이블에 연결할 모델 객체
model =new DefaultTableModel(); //생성자에서 생성된 이 객체의 참조값이 다른 메소드에서도 필요한 상황 -> 이 값을 지역 변수가 아닌 필드로 옮기기
model.setColumnIdentifiers(colNames);
model.setRowCount(0);
//모델을 테이블에 연결
table.setModel(model);
//스크롤이 가능하도록 테이블을 JScrollPane에 감싼다
JScrollPane scroll=new JScrollPane(table);
//JScrollPnae을 프레임의 가운데에 배치하기
add(scroll, BorderLayout.CENTER);
//프레임 객체가 생성되는 시점에 DB에 있는 내용을 읽어와서 출력할 수 있게 해준다.
//JTable에 출력할 sample row 데이터
//Object[] row= {1, "글린다", "오즈"};
//테이블에 연결된 모델에 row 추가하기
//model.addRow(row);
printMember();
//테이블에 출력할 회원 목록 얻어오기
//MemberDao dao = new MemberDao();
//List<MemberDto> list= dao.getList();
//반복문 돌면서
//for (MemberDto tmp:list ) {
//MemberDto 객체에 담긴 회원정보를 이용해서 Object[] 에 담은 다음
//Object[] rowData = {tmp.getNum(), tmp.getName(), tmp.getAddr()};
//테이블에 연결된 모델에 추가하기
//model.addRow(rowData);
//}
//칼럼의 제목 글자 조정
table.getTableHeader().setFont(new Font("Sans-serif", Font.BOLD, 18));
table.setFont(new Font("Sans-serif", Font.PLAIN,16));//데이터 글자 크기 14
table.setRowHeight(25);//각 행의 높이를 조정
}//생성자 : 프레임 객체가 생성되는 시점에 만들어짐
public static void main(String[] args) {
MemberFrame f=new MemberFrame("회원 정보 관리");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//가독성 좋게+부모자식이라 JFrame.생략하고
f.setBounds(100,100,800,500);
f.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
//입력한 이름과 주소를 읽어 온다
String name=inputName.getText();//this. 이 생략되어 있는데 JTextField의 참조값이 필드에 저장되어 있어서 생략됨
String addr=inputAddr.getText();//this. 이 생략되어 있는데 JTextField의 참조값이 필드에 저장되어 있어서 생략됨
//입력한 이름과 주소를 MEmebrDto 객체에 담는다
MemberDto dto=new MemberDto();
dto.setName(name);
dto.setAddr(addr);
//MemberDao 객체를 생성해서
MemberDao dao=new MemberDao();
//insert() 메소드를 이용해서 회원 정보를 DB에 저장한다
dao.insert(dto);
printMember();
}
//회원 목록을 JTable에 출력하는 메소드
public void printMember() {
//기존에 출력된 내용을 초기화한 후에
model.setRowCount(0);
//테이블에 출력할 회원 목록 얻어오기
MemberDao dao = new MemberDao();
List<MemberDto> list= dao.getList();
//반복문 돌면서
for (MemberDto tmp:list ) {
//MemberDto 객체에 담긴 회원정보를 이용해서 Object[] 에 담은 다음
Object[] rowData = {tmp.getNum(), tmp.getName(), tmp.getAddr()};
//테이블에 연결된 모델에 추가하기 -> 모델을 필드로 만들기
model.addRow(rowData);
}
}
}
로우를 선택하면 삭제할 수 있는 기능까지 추가하기
4교시에 이어서
<12:30 4교시>
package test.frame;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MemberFrame extends JFrame implements ActionListener{
//필요한 필드 정의하기
JTextField inputName, inputAddr;
DefaultTableModel model;
JTable table;
//생성자
public MemberFrame(String title) {
super(title);
//레이아웃 설정
setLayout(new BorderLayout());
//JLabel 2개
JLabel label2= new JLabel("이름");
JLabel label3= new JLabel("주소");
//JTextField 1개
inputName = new JTextField(10);
inputAddr = new JTextField(10);
//JButton
JButton addBtn=new JButton("추가");
JButton deleteBtn=new JButton("삭제");
//패널에 UI 배치(add는 패널의 메소드)
JPanel panel =new JPanel();
panel.add(label2);
panel.add(inputName);
panel.add(label3);
panel.add(inputAddr);
panel.add(addBtn);
panel.add(deleteBtn);
//패널의 배경색 설정
panel.setBackground(Color.orange);
//패널을 프레임의 위쪽에 배치
add(panel, BorderLayout.NORTH);
//버튼에 액션 리스너 등록
addBtn.addActionListener(this);
deleteBtn.addActionListener(this);
//버튼에 액션 command 설정
addBtn.setActionCommand("add");
deleteBtn.setActionCommand("delete");
//회원 목록을 출력할 테이블-> 필드로 뽑는다 ->여기 있던 JTable table에 대해 앞의 JTable을 지워준다
table=new JTable();
//테이블의 칼럼명을 배열로 미리 준비한다
String[] colNames= {"번호", "이름", "주소"};
//테이블에 연결할 모델 객체
model =new DefaultTableModel(); //생성자에서 생성된 이 객체의 참조값이 다른 메소드에서도 필요한 상황 -> 이 값을 지역 변수가 아닌 필드로 옮기기
model.setColumnIdentifiers(colNames);
model.setRowCount(0);
//모델을 테이블에 연결
table.setModel(model);
//스크롤이 가능하도록 테이블을 JScrollPane에 감싼다
JScrollPane scroll=new JScrollPane(table);
//JScrollPnae을 프레임의 가운데에 배치하기
add(scroll, BorderLayout.CENTER);
//프레임 객체가 생성되는 시점에 DB에 있는 내용을 읽어와서 출력할 수 있게 해준다.
//JTable에 출력할 sample row 데이터
//Object[] row= {1, "글린다", "오즈"};
//테이블에 연결된 모델에 row 추가하기
//model.addRow(row);
printMember();
//테이블에 출력할 회원 목록 얻어오기
//MemberDao dao = new MemberDao();
//List<MemberDto> list= dao.getList();
//반복문 돌면서
//for (MemberDto tmp:list ) {
//MemberDto 객체에 담긴 회원정보를 이용해서 Object[] 에 담은 다음
//Object[] rowData = {tmp.getNum(), tmp.getName(), tmp.getAddr()};
//테이블에 연결된 모델에 추가하기
//model.addRow(rowData);
//}
//칼럼의 제목 글자 조정
table.getTableHeader().setFont(new Font("Sans-serif", Font.BOLD, 18));
table.setFont(new Font("Sans-serif", Font.PLAIN,16));//데이터 글자 크기 14
table.setRowHeight(25);//각 행의 높이를 조정
}//생성자 : 프레임 객체가 생성되는 시점에 만들어짐
public static void main(String[] args) {
MemberFrame f=new MemberFrame("회원 정보 관리");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//가독성 좋게+부모자식이라 JFrame.생략하고
f.setBounds(100,100,800,500);
f.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
//눌러진 버튼의 action command를 읽어온다
String command=e.getActionCommand();
if(command.equals("add")) {//java 에서는 문자열 비교를 .equals()메소드를 이용해서 비교해야 한다. (자바스크립트에서는 command =="add")
//입력한 이름과 주소를 읽어 온다
String name=inputName.getText();//this. 이 생략되어 있는데 JTextField의 참조값이 필드에 저장되어 있어서 생략됨
String addr=inputAddr.getText();//this. 이 생략되어 있는데 JTextField의 참조값이 필드에 저장되어 있어서 생략됨
//입력한 이름과 주소를 MEmebrDto 객체에 담는다
MemberDto dto=new MemberDto();
dto.setName(name);
dto.setAddr(addr);
//MemberDao 객체를 생성해서
MemberDao dao=new MemberDao();
//insert() 메소드를 이용해서 회원 정보를 DB에 저장한다
dao.insert(dto);
}else if(command.equals("delete")) {
int selectedRow=table.getSelectedRow();
if(selectedRow==-1) {
JOptionPane.showMessageDialog(this, "삭제할 row를 선택하세요");//자바 frame 창에서 알림을 띄우기 this는 알림을 띄울 컴포넌트(멤버프레임)의 참조값, 알림 메시지를 전달.
return;// 메소드를 여기서 끝내기
}
}
printMember();
}
//회원 목록을 JTable에 출력하는 메소드
public void printMember() {
//기존에 출력된 내용을 초기화한 후에
model.setRowCount(0);
//테이블에 출력할 회원 목록 얻어오기
MemberDao dao = new MemberDao();
List<MemberDto> list= dao.getList();
//반복문 돌면서
for (MemberDto tmp:list ) {
//MemberDto 객체에 담긴 회원정보를 이용해서 Object[] 에 담은 다음
Object[] rowData = {tmp.getNum(), tmp.getName(), tmp.getAddr()};
//테이블에 연결된 모델에 추가하기 -> 모델을 필드로 만들기
model.addRow(rowData);
}
}
}
package test.frame;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MemberFrame extends JFrame implements ActionListener{
//필요한 필드 정의하기
JTextField inputName, inputAddr;
DefaultTableModel model;
JTable table;
//생성자
public MemberFrame(String title) {
super(title);
//레이아웃 설정
setLayout(new BorderLayout());
//JLabel 2개
JLabel label2= new JLabel("이름");
JLabel label3= new JLabel("주소");
//JTextField 1개
inputName = new JTextField(10);
inputAddr = new JTextField(10);
//JButton
JButton addBtn=new JButton("추가");
JButton deleteBtn=new JButton("삭제");
//패널에 UI 배치(add는 패널의 메소드)
JPanel panel =new JPanel();
panel.add(label2);
panel.add(inputName);
panel.add(label3);
panel.add(inputAddr);
panel.add(addBtn);
panel.add(deleteBtn);
//패널의 배경색 설정
panel.setBackground(Color.orange);
//패널을 프레임의 위쪽에 배치
add(panel, BorderLayout.NORTH);
//버튼에 액션 리스너 등록
addBtn.addActionListener(this);
deleteBtn.addActionListener(this);
//버튼에 액션 command 설정
addBtn.setActionCommand("add");
deleteBtn.setActionCommand("delete");
//회원 목록을 출력할 테이블-> 필드로 뽑는다 ->여기 있던 JTable table에 대해 앞의 JTable을 지워준다
table=new JTable();
//테이블의 칼럼명을 배열로 미리 준비한다
String[] colNames= {"번호", "이름", "주소"};
//테이블에 연결할 모델 객체
model =new DefaultTableModel(); //생성자에서 생성된 이 객체의 참조값이 다른 메소드에서도 필요한 상황 -> 이 값을 지역 변수가 아닌 필드로 옮기기
model.setColumnIdentifiers(colNames);
model.setRowCount(0);
//모델을 테이블에 연결
table.setModel(model);
//스크롤이 가능하도록 테이블을 JScrollPane에 감싼다
JScrollPane scroll=new JScrollPane(table);
//JScrollPnae을 프레임의 가운데에 배치하기
add(scroll, BorderLayout.CENTER);
//프레임 객체가 생성되는 시점에 DB에 있는 내용을 읽어와서 출력할 수 있게 해준다.
//JTable에 출력할 sample row 데이터
//Object[] row= {1, "글린다", "오즈"};
//테이블에 연결된 모델에 row 추가하기
//model.addRow(row);
printMember();
//테이블에 출력할 회원 목록 얻어오기
//MemberDao dao = new MemberDao();
//List<MemberDto> list= dao.getList();
//반복문 돌면서
//for (MemberDto tmp:list ) {
//MemberDto 객체에 담긴 회원정보를 이용해서 Object[] 에 담은 다음
//Object[] rowData = {tmp.getNum(), tmp.getName(), tmp.getAddr()};
//테이블에 연결된 모델에 추가하기
//model.addRow(rowData);
//}
//칼럼의 제목 글자 조정
table.getTableHeader().setFont(new Font("Sans-serif", Font.BOLD, 18));
table.setFont(new Font("Sans-serif", Font.PLAIN,16));//데이터 글자 크기 14
table.setRowHeight(25);//각 행의 높이를 조정
}//생성자 : 프레임 객체가 생성되는 시점에 만들어짐
public static void main(String[] args) {
MemberFrame f=new MemberFrame("회원 정보 관리");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//가독성 좋게+부모자식이라 JFrame.생략하고
f.setBounds(100,100,800,500);
f.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
//눌러진 버튼의 action command를 읽어온다
String command=e.getActionCommand();
if(command.equals("add")) {//java 에서는 문자열 비교를 .equals()메소드를 이용해서 비교해야 한다. (자바스크립트에서는 command =="add")
//입력한 이름과 주소를 읽어 온다
String name=inputName.getText();//this. 이 생략되어 있는데 JTextField의 참조값이 필드에 저장되어 있어서 생략됨
String addr=inputAddr.getText();//this. 이 생략되어 있는데 JTextField의 참조값이 필드에 저장되어 있어서 생략됨
//입력한 이름과 주소를 MEmebrDto 객체에 담는다
MemberDto dto=new MemberDto();
dto.setName(name);
dto.setAddr(addr);
//MemberDao 객체를 생성해서
MemberDao dao=new MemberDao();
//insert() 메소드를 이용해서 회원 정보를 DB에 저장한다
dao.insert(dto);
}else if(command.equals("delete")) {
int selectedRow=table.getSelectedRow();
if(selectedRow==-1) {
JOptionPane.showMessageDialog(this, "삭제할 row를 선택하세요");//자바 frame 창에서 알림을 띄우기 this는 알림을 띄울 컴포넌트(멤버프레임)의 참조값, 알림 메시지를 전달.
return;// 메소드를 여기서 끝내기
}
int num= (int)model.getValueAt(selectedRow, 0);
new MemberDao().delete(num);
}
printMember();
}
//회원 목록을 JTable에 출력하는 메소드
public void printMember() {
//기존에 출력된 내용을 초기화한 후에
model.setRowCount(0);
//테이블에 출력할 회원 목록 얻어오기
MemberDao dao = new MemberDao();
List<MemberDto> list= dao.getList();
//반복문 돌면서
for (MemberDto tmp:list ) {
//MemberDto 객체에 담긴 회원정보를 이용해서 Object[] 에 담은 다음
Object[] rowData = {tmp.getNum(), tmp.getName(), tmp.getAddr()};
//테이블에 연결된 모델에 추가하기 -> 모델을 필드로 만들기
model.addRow(rowData);
}
}
}
여기까지가 java의 기초 마무리.
오늘 남은 교시동안 할 거는 내가 사용할 수 있는 app 만들기
0. 주제 기획하고
1. DB에 테이블 만들고
2. Dto, Dao 만들고
3. frame 만들기
일단 만들거 기획하면.
만들 테이블 주제는 읽을 책 목록
번호 /책 제목/ 저자
읽을 책 목록에 번호나 시퀀스는 필요없지만 연습용으로 만들자
테이블과 시퀀스 만들기
테이블 제목 BtR (Books to Read 대신에 두문자어)
테이블 칼럼
번호(no) - number(자바int), primary key / 책 제목(title)- varchar2(100)(자바String) / 저자(writer) - varchar2(50)(자바String)
데이터베이스 안보고 오랜만에 따라하려니까 헤맸다 ㅋㅋㅋ
휴... 복습 꾸준히 해야겠어 ㅠ
시퀀스 seq_BtR 만들기
이제 Dto 만들러 가야지
일단 dto 클래스 만드는 건 확실히 쉽다. source에서 생성하면 되기도 하고 내가 방법을 완전히 숙지한 듯
아래는 dto 코드
package test.dto;
public class BtRDto {
private int no;
private String title;
private String writer;
public BtRDto() {}
public BtRDto(int no, String title, String writer) {
super();
this.no = no;
this.title = title;
this.writer = writer;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
}
'공부의 기록 > 자바 풀 스택 : 수업내용정리' 카테고리의 다른 글
자바 풀 스택 1/2 오전 기록 029-1 (0) | 2025.01.02 |
---|---|
자바 풀 스택 12/31 오후 기록 028-2 (0) | 2024.12.31 |
자바 풀 스택 12/30 오후 기록 027-2 (1) | 2024.12.30 |
자바 풀 스택 12/30 오전 기록 027-1 (0) | 2024.12.30 |
자바 풀 스택 12/27 오후 기록 026-2 (1) | 2024.12.27 |