티스토리 뷰
728x90
반응형
예제 1
- 프레임 생성하고 나타나도록 설정하기
- 창 종료 시 프로세스 종료되도록 설정하기
MyFrame.java
package test.frame;
import javax.swing.JFrame;
public class MyFrame extends JFrame{
//run했을 때 실행 순서가 시작되는 main 메소드
public static void main(String[] args) {
MyFrame f = new MyFrame();
f.setSize(800,500);
f.setLocation(100,100);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
예제 2
버튼 만들고 버튼 추가하기
MyFrame2.java
package test.frame;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MyFrame2 extends JFrame{
//생성자
public MyFrame2() {
setSize(800,500);
setLocation(100,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout(FlowLayout.LEFT));
//버튼을 만들어서
JButton btn1 = new JButton("버튼1");
JButton btn2 = new JButton("버튼2");
JButton btn3 = new JButton("버튼3");
add(btn1);
add(btn2);
add(btn3);
setVisible(true);
}
//run했을 때 실행 순서가 시작되는 main 메소드
public static void main(String[] args) {
MyFrame2 f = new MyFrame2();
}
}
예제 3
FlowLayout 객체 생성하고 버튼 추가하기
MyFrame3.java
package test.frame;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MyFrame3 extends JFrame{
//생성자
public MyFrame3() {
setSize(800, 500);
setLocation(100, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//FlowLayout 객체 전달하기
setLayout(new FlowLayout(FlowLayout.LEFT));
//버튼을 만들어서
JButton btn1=new JButton("버튼1");
JButton btn2=new JButton("버튼2");
JButton btn3=new JButton("버튼3");
//프레임에 추가하기
add(btn1);
add(btn2);
add(btn3);
setVisible(true);
}
//run 했을때 실행순서가 시작되는 main 메소드
public static void main(String[] args) {
new MyFrame3();
}
}
예제 4
BorderLayout 프레임에 버튼 추가하기
MyFrame4.java
package test.frame;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MyFrame4 extends JFrame{
//생성자
public MyFrame4() {
setSize(800, 500);
setLocation(100, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//FlowLayout 객체 전달하기
setLayout(new BorderLayout());
//버튼을 만들어서
JButton btn1=new JButton("버튼1");
JButton btn2=new JButton("버튼2");
JButton btn3=new JButton("버튼3");
JButton btn4=new JButton("버튼4");
//프레임에 추가하기
add(btn1, BorderLayout.NORTH);
add(btn2, BorderLayout.WEST);
add(btn3, BorderLayout.EAST);
add(btn4, BorderLayout.SOUTH);
setVisible(true);
}
//run 했을때 실행순서가 시작되는 main 메소드
public static void main(String[] args) {
new MyFrame4();
}
}
예제 5
전송, 삭제, 버튼을 만들고 각각 액션 이벤트 리스너 만들기
MyFrame5.java
package test.frame;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MyFrame5 extends JFrame{
//생성자
public MyFrame5() {
setSize(800, 500);
setLocation(100, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new FlowLayout());
JButton sendBtn = new JButton("전송");
add(sendBtn);
JButton deleteBtn = new JButton("삭제");
add(deleteBtn);
JButton updateBtn = new JButton("수정");
add(updateBtn);
//ActionListener 인터페이스 type의 참조값 얻어내기
ActionListener Listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("전송합니다.");
}
};
//전송 버튼이 눌러졌을 때 특정 객체의 특정 메소드가 호출되게 하는 방법은?
sendBtn.addActionListener(Listener);
deleteBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("삭제합니다.");
}
});
updateBtn.addActionListener((e)->{
System.out.println("수정합니다.");
});
setVisible(true);
}
//run 했을때 실행순서가 시작되는 main 메소드
public static void main(String[] args) {
new MyFrame5();
}
}
예제 6
예제5를 수정하여 버튼에 action command 설정하고 하나의 액션 이벤트 리스너에서 분기하기
MyFrame6.java
package test.frame;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MyFrame6 extends JFrame implements ActionListener{
//생성자
public MyFrame6() {
setSize(800, 500);
setLocation(100, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new FlowLayout());
JButton sendBtn = new JButton("전송");
add(sendBtn);
JButton deleteBtn = new JButton("삭제");
add(deleteBtn);
JButton updateBtn = new JButton("수정");
add(updateBtn);
//버튼에 리스너 등록하기
sendBtn.addActionListener(this);
deleteBtn.addActionListener(this);
updateBtn.addActionListener(this);
//버튼에 action command 설정하기
sendBtn.setActionCommand("send");
deleteBtn.setActionCommand("delete");
updateBtn.setActionCommand("update");
setVisible(true);
}
//run 했을때 실행순서가 시작되는 main 메소드
public static void main(String[] args) {
new MyFrame6();
}
//ActionListener 인터페이스를 구현해서 강제로 Override 한 메소드
@Override
public synchronized void actionPerformed(ActionEvent e) {
//이벤트가 발생한 버튼에 설정된 action command 읽어오기
String command = e.getActionCommand();
if(command.equals("send")) {
System.out.println("전송합니다.");
}else if(command.equals("delete")) {
System.out.println("삭제합니다.");
}else if(command.equals("update")){
System.out.println("수정합니다.");
}
}
}
예제 7
- JTextField로 입력칸에 문자열을 입력하고, 전송버튼 누르면 입력한 문자열을 알림창으로 띄우기
- 삭제 버튼 누르면 입력한 입력칸의 내용 리셋하기
MyFrame8.java
package test.frame;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MyFrame8 extends JFrame implements ActionListener{
//필드정의하기
private JTextField InputMsg;
//생성자
public MyFrame8() {
setSize(800, 500);
setLocation(100, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//FlowLayout 객체 전달하기
setLayout(new FlowLayout());
//문자열을 잉력할 수 있는 UI의 참조값을 필드에 저장하기
InputMsg = new JTextField(10);
//전송버튼
JButton sendBtn = new JButton("전송");
sendBtn.setActionCommand("send");
sendBtn.addActionListener(this);
//삭제버튼
JButton deleteBtn = new JButton("삭제");
deleteBtn.setActionCommand("delete");
deleteBtn.addActionListener(this);
//패널 객체를 생성해서
JPanel panel = new JPanel();
//패널에 UI를 추가하고
panel.add(InputMsg);
panel.add(sendBtn);
panel.add(deleteBtn);
//패널 째로 프레임에 추가하기
add(panel);
setVisible(true);
}
//run 했을때 실행순서가 시작되는 main 메소드
public static void main(String[] args) {
new MyFrame8();
}
//ActionListener 인터페이스를 구현해서 강제로 Override 한 메소드
@Override
public void actionPerformed(ActionEvent e) {
//이벤트가 발생한 버튼에 설정된 action command 읽어오기
String command = e.getActionCommand();
if(command.equals("send")) {
//JTextField 에 입력한 문자열 읽어오기
String msg = InputMsg.getText();
JOptionPane.showMessageDialog(this,msg);
}else if(command.equals("delete")) {
InputMsg.setText("");
}
}
}
예제 8
- JList 사용하기
- keyEventListener 사용하여 엔터 누르면 입력되도록 만들기
MyFrame9.java
package test.frame;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import test.dao.MemberDao;
public class MyFrame9 extends JFrame implements ActionListener, KeyListener{
//필요한 필드 정의하기
private JTextField inputName;
private DefaultListModel<String> model;
private JList jList;
//생성자
public MyFrame9() {
setSize(800, 500);
setLocation(100, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//BorderLayout 객체 전달하기
setLayout(new BorderLayout());
//페널에 추가할 UI 를 미리 만든다.
JLabel label=new JLabel("추가할 이름입력");
inputName=new JTextField(10);
JButton addBtn=new JButton("추가");
addBtn.setActionCommand("add");
addBtn.addActionListener(this);
//삭제 버튼
JButton deleteBtn=new JButton("삭제");
deleteBtn.setActionCommand("delete");
deleteBtn.addActionListener(this);
//페널에 UI 를 추가하고
JPanel topPanel=new JPanel();
topPanel.add(label);
topPanel.add(inputName);
topPanel.add(addBtn);
topPanel.add(deleteBtn);
//페널째로 프레임의 상단에 추가하기
add(topPanel, BorderLayout.NORTH);
//목록을 출력할 UI
jList=new JList<>();
//JList 에 출력할 데이터를 가지고 있는 모델 객체
model=new DefaultListModel<>();
model.addElement("김구라");
model.addElement("해골");
model.addElement("원숭이");
model.addElement("번호: 1, 이름: 김구라, 주소: 노량진");
//모델을 JList 에 연결하기
jList.setModel(model);
//스크롤 페널에 JList 넣어주기
JScrollPane sc=new JScrollPane(jList,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//프레임에 스크롤 페널 추가하기
add(sc, BorderLayout.CENTER);
//JTextField 에 키 리스너 등록하기
inputName.addKeyListener(this);
setVisible(true);
}
//run 했을때 실행순서가 시작되는 main 메소드
public static void main(String[] args) {
new MyFrame9();
}
//ActionListener 인터페이스를 구현해서 강제로 Override 한 메소드
@Override
public void actionPerformed(ActionEvent e) {
//이벤트가 발생한 버튼에 설정된 action command 읽어오기
String command=e.getActionCommand();
if(command.equals("add")) {
//JTextField 에 입력한 문자열을 읽어와서 DefaultListModel 객체에 추가해야 한다.
String name=inputName.getText();
model.addElement(name);
inputName.setText("");
}else if(command.equals("delete")) {
//JList 의 메소드를 이용해서 선택된 행을 알아낸다.
int index=jList.getSelectedIndex();
//만일 선택된 인덱스가 있다면
if(index >= 0) {
//모델에서 해당 인덱스를 삭제한다.
model.remove(index);
}
}
}
@Override
public void keyPressed(KeyEvent e) {
//눌러진 키의 코드값을 읽어와서
int code=e.getKeyCode();
//엔터키의 코드값인지 확인한다.
if(code == KeyEvent.VK_ENTER) {//만일 엔터키를 눌렀다면
//JTextField 에 입력한 문자열을 읽어와서 DefaultListModel 객체에 추가해야 한다.
String name=inputName.getText();
model.addElement(name);
inputName.setText("");
}
}
@Override
public void keyReleased(KeyEvent e) {
//System.out.println("keyReleased");
}
@Override
public void keyTyped(KeyEvent e) {
//System.out.println("keyTyped");
}
}
예제 9
DB와 연결하여 MemberDao와 MemberDto를 활용하여 수정, 삭제 시 DB에도 적용되도록 프로그래밍하기
MemberFrame_answer.java
package test.frame;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
/*
* 1. 실제 DB 에 있는 회원 정보를 JList 에 출력해 보세요.
*
* 2. 이름과 주소를 각각의 JTextField 에 입력한후 추가 버튼을 누르면 DB 에 실제로 추가도 되고
* JList 의 내용도 업데이트 되도록 해 보세요.
*
* 3. 특정 row 를 선택한 상태에서 삭제 버튼을 누르면 DB 에서 실제로 삭제도되고
* JList 의 내용도 업데이트 되도록 해보세요.
*
* - hint
* MemberDao 객체를 활용하세요.
*
* DefaultListModel 객체의 .clear() 메소드를 호출하면 모델데이터가 전체 삭제된다.
*
* JList 의 내용을 업데이트 하려면
* 모델객체의 .clear() 메소드를 호출후 다시 전체 데이터를 .addElement() 하면된다.
*/
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import test.dao.MemberDao;
import test.dto.MemberDto;
public class MemberFrame_answer extends JFrame implements ActionListener{
//필요한 필드
private JTextField inputName, inputAddr;
private DefaultListModel<String> model;
private JList<String> jList;
private List<MemberDto> members;
//생성자
public MemberFrame_answer() {
setSize(800, 500);
setLocation(100, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//BorderLayout 객체 전달하기
setLayout(new BorderLayout());
//회원목록을 출력할 JList
jList=new JList<>();
//JList 에 출력할 데이터를 가지고 있는 모델
model=new DefaultListModel<>();
//모델을 JList 에 연결
jList.setModel(model);
//스크롤 페널에 JList 넣어주기
JScrollPane sc=new JScrollPane(jList,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//프레임에 스크롤 페널 추가하기
add(sc, BorderLayout.CENTER);
//회원 목록 출력하기
showMembers();
//필요한 UI 객체를 생성해서
JLabel labelName=new JLabel("이름");
JLabel labelAddr=new JLabel("주소");
inputName=new JTextField(10);
inputAddr=new JTextField(10);
JButton addBtn=new JButton("추가");
JButton deleteBtn=new JButton("삭제");
//페널에 추가한 후
JPanel topPanel=new JPanel();
topPanel.add(labelName);
topPanel.add(inputName);
topPanel.add(labelAddr);
topPanel.add(inputAddr);
topPanel.add(addBtn);
topPanel.add(deleteBtn);
//프레임의 상단에 페널을 배치한다.
add(topPanel, BorderLayout.NORTH);
//버튼에 리스너 등록
addBtn.addActionListener(this);
deleteBtn.addActionListener(this);
//버튼에 action command 설정
addBtn.setActionCommand("add");
deleteBtn.setActionCommand("delete");
setVisible(true);
}
public static void main(String[] args) {
new MemberFrame_answer();
}
//회원 정보를 추가하는 동작
public void addAction() {
//1. 입력한 이름과 주소를 읽어온다.
String name=inputName.getText();
String addr=inputAddr.getText();
//2. DB 에 저장한다.
MemberDto dto=new MemberDto();
dto.setName(name);
dto.setAddr(addr);
//작업의 성공여부를 리턴 받는다.
boolean isSuccess=new MemberDao().insert(dto);
if(isSuccess) {
JOptionPane.showMessageDialog(this, "저장 했습니다.");
//모델을 clear 하고
model.clear();
showMembers();
}else {
JOptionPane.showMessageDialog(this, "저장 실패!");
}
}
//회원 정보를 삭제하는 동작
public void deleteAction() {
//선택한 row 의 인덱스를 읽어온다.
int index=jList.getSelectedIndex();
if(index == -1)return; //만일 선택한 row 가 없다면 메소드를 여기서 끝내라
/*
* 특정 회원의 정보를 정확히 삭제 하려면 회원의 primary key 값
* 즉 회원의 번호를 얻어와야 한다.
* 어떻게 얻어오기??
*/
System.out.println("index:"+index);
//삭제할 회원의 번호
int num=members.get(index).getNum();
//MemberDao 객체를 이용해서 DB 에서 삭제한다.
new MemberDao().delete(num);
//화면 업데이트
model.clear();
showMembers();
}
//회원목록을 출력하는 메소드
public void showMembers() {
members=new MemberDao().getList();
for(MemberDto tmp:members) {
//출력할 문자열을 구성
String info="번호:"+tmp.getNum()+", 이름:"+tmp.getName()+" 주소:"+tmp.getAddr();
//구성된 문자열을 JList 에 연결된 모델에 추가하기
model.addElement(info);
}
}
@Override
public void actionPerformed(ActionEvent e) {
String command=e.getActionCommand();
if(command.equals("add")) {
addAction();
}else if(command.equals("delete")) {
deleteAction();
}
}
}
예제 10
JTable 사용하여 위의 예제 풀기
MemberFrame2.java
package test.frame;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
/*
* 1. 실제 DB 에 있는 회원 정보를 JList 에 출력해 보세요.
*
* 2. 이름과 주소를 각각의 JTextField 에 입력한후 추가 버튼을 누르면 DB 에 실제로 추가도 되고
* JList 의 내용도 업데이트 되도록 해 보세요.
*
* 3. 특정 row 를 선택한 상태에서 삭제 버튼을 누르면 DB 에서 실제로 삭제도되고
* JList 의 내용도 업데이트 되도록 해보세요.
*
* - hint
* MemberDao 객체를 활용하세요.
*
* DefaultListModel 객체의 .clear() 메소드를 호출하면 모델데이터가 전체 삭제된다.
*
* JList 의 내용을 업데이트 하려면
* 모델객체의 .clear() 메소드를 호출후 다시 전체 데이터를 .addElement() 하면된다.
*/
import javax.swing.JList;
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 MemberFrame2 extends JFrame implements ActionListener,PropertyChangeListener{
//필요한 필드
private JTextField inputName, inputAddr;
private List<MemberDto> members;
private JTable table;
private DefaultTableModel model;
//생성자
public MemberFrame2() {
setSize(800, 500);
setLocation(100, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//BorderLayout 객체 전달하기
setLayout(new BorderLayout());
//필요한 UI 객체를 생성해서
JLabel labelName=new JLabel("이름");
JLabel labelAddr=new JLabel("주소");
inputName=new JTextField(10);
inputAddr=new JTextField(10);
JButton addBtn=new JButton("추가");
JButton deleteBtn=new JButton("삭제");
//페널에 추가한 후
JPanel topPanel=new JPanel();
topPanel.add(labelName);
topPanel.add(inputName);
topPanel.add(labelAddr);
topPanel.add(inputAddr);
topPanel.add(addBtn);
topPanel.add(deleteBtn);
//프레임의 상단에 페널을 배치한다.
add(topPanel, BorderLayout.NORTH);
//버튼에 리스너 등록
addBtn.addActionListener(this);
deleteBtn.addActionListener(this);
//버튼에 action command 설정
addBtn.setActionCommand("add");
deleteBtn.setActionCommand("delete");
//표형식으로 정보를 출력하기 위한 JTable
table=new JTable();
//테이블의 칼럼명을 String[] 로 준비하기
String[] colNames= {"번호", "이름", "주소"};
//테이블에 출력할 데이터를 가지고 있는 DefaultTableModel
model=new DefaultTableModel(colNames, 0) {
//인자로 전달되는 행(row), 열(column) 수정 가능 여부를 리턴하는 메소드
@Override
public boolean isCellEditable(int row, int column) {
//0번 칼럼만 수정 불가능하도록 false를 리턴
if(column ==0) return false;
//나머지는 모두 수정 가능하도록 true를 리턴
else return true;
}
};
//모델을 테이블에 연결
table.setModel(model);
//스크롤이 가능하도록
JScrollPane sc=new JScrollPane(table);
//프레임의 가운데에 배치
add(sc, BorderLayout.CENTER);
//테이블에 회원 목록 출력하기
showMembers();
//테이블 셀에 수정 작업이 일어났는지 감시할 리스너 등록
table.addPropertyChangeListener(this);
setVisible(true);
}
public static void main(String[] args) {
new MemberFrame2();
}
//회원 정보를 추가하는 동작
public void addAction() {
//1. 입력한 이름과 주소를 읽어온다.
String name=inputName.getText();
String addr=inputAddr.getText();
//2. DB 에 저장한다.
MemberDto dto=new MemberDto();
dto.setName(name);
dto.setAddr(addr);
//작업의 성공여부를 리턴 받는다.
boolean isSuccess=new MemberDao().insert(dto);
if(isSuccess) {
JOptionPane.showMessageDialog(this, "저장 했습니다.");
//행의 갯수를 강제로 0으로 만들고
model.setRowCount(0);
//다시 출력하기
showMembers();
}else {
JOptionPane.showMessageDialog(this, "저장 실패!");
}
}
//회원 정보를 삭제하는 동작
public void deleteAction() {
//선택된 row의 인덱스를 얻어와서
int index = table.getSelectedRow();
if(index ==-1)return;
//DB에서 삭제하고
new MemberDao().delete(members.get(index).getNum());
//다시 출력
model.setRowCount(0);
showMembers();
}
//회원목록을 출력하는 메소드
public void showMembers() {
//DB 에서 회원 목록을 얻어와서
members=new MemberDao().getList();
for(MemberDto tmp:members) {
//테이블 row 에 출력할 데이터를 순서대로 담은 Object[] 객체를 준비해서
Object[] row= {tmp.getNum(), tmp.getName(), tmp.getAddr()};
//모델에 추가한다.
model.addRow(row);
}
}
@Override
public void actionPerformed(ActionEvent e) {
String command=e.getActionCommand();
if(command.equals("add")) {
addAction();
}else if(command.equals("delete")) {
deleteAction();
}
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if(evt.getPropertyName().equals("tableCellEditor")) {
//선택된 row의 index를 얻어와서
int index = table.getSelectedRow();
//인덱스에 해당하는 model에서 입력된 이름과 주소를 읽어온다.
int num = (int)model.getValueAt(index, 0);//0번째 인덱스의 번호를 읽어온다.
String name = (String)model.getValueAt(index,1);//1번째 인덱스의 이름을 읽어온다.
String addr = (String)model.getValueAt(index,2);//2번째 인덱스의 주소를 읽어온다.
//DB에 수정 반영
MemberDto dto = new MemberDto(num,name,addr);
new MemberDao().update(dto);
}
}
}
반응형
'development > Java' 카테고리의 다른 글
[Java] 쓰레드 Thread (0) | 2021.11.16 |
---|---|
[Java] JFrame #1 (0) | 2021.11.16 |
[Java] Java template 만들기 (0) | 2021.11.13 |
[Java] JDBC #2 DAO (0) | 2021.11.13 |
[Java] JDBC #1 / DB 연결, SELECT, INSERT, DELETE, UPDATE, DTO (1) | 2021.11.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- baekjoon
- javascript
- append
- CSS
- 고득점 키트
- jQuery
- html
- Java
- brute force
- 스프링
- Django
- Case When
- Oracle
- 브루트 포스
- R
- 큐
- jsp
- 프로그래머스
- 문자열
- 단계별로풀어보기
- web
- 정렬
- 자바
- 파이썬
- 백준
- 자바스크립트
- 장고
- python
- 덱
- bootstrap
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함