Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- session.removeAttribute
- 로그인화면
- ;
- scanner
- 빈즈
- 미래직장
- "
- 파일 호출
- Import
- 버리자
- static
- 자바빈즈
- 페이지 이동
- 동기부여
- 페이지이동
- 동기 부여
- session.getAttribute
- 향상된 for문
- Alert
- \
- 파일호출
- 팝업창
- 영감
- session.setAttribute
- target
- 데이터사이언스
- BEANS
- javaBeans
- iframe
- opener
Archives
- Today
- Total
갈림길 이정표
[java] JDialog 본문
package pack1;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JButton;
import javax.swing.JDialog;
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;
public class DbTest8CRUD extends JFrame implements ActionListener {
JButton btnIns, btnUpd, btnDel, btnExt;
String[][] datas = new String[0][4];
String[] titles = { "코드", "상품명", "수량", "단가" };
DefaultTableModel model = new DefaultTableModel(datas, titles); // 멤버선언할 때 미리 입력 layout 배치 때 안해도 됨
JTable table = new JTable(model);
JLabel lblCount = new JLabel("건수: 0");
Connection conn;
PreparedStatement pstmt;
ResultSet rs;
public DbTest8CRUD() {
super("상품자료");
layoutInit();
accDb();
setResizable(false);
setBounds(300, 300, 400, 300);
setVisible(true);
// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); (이거는 바로 종료)
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
int re = JOptionPane.showConfirmDialog(DbTest8CRUD.this, "정말 종료할까요?", "종료",
JOptionPane.OK_CANCEL_OPTION);
if (re == JOptionPane.OK_OPTION) {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e2) {
}
setDefaultCloseOperation(EXIT_ON_CLOSE);
//System.exit(0);
} else {
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
}
}
});
}
private void layoutInit() {
btnIns = new JButton("추가");
// btnUpd = new JButton("수정");
btnDel = new JButton("삭제");
btnExt = new JButton("종료");
btnIns.addActionListener(this);
// btnUpd.addActionListener(this);
btnDel.addActionListener(this);
btnExt.addActionListener(this);
JPanel panel = new JPanel();
panel.add(btnIns);
// panel.add(btnUpd);
panel.add(btnDel);
panel.add(btnExt);
add("North", panel);
table.getColumnModel().getColumn(0).setPreferredWidth(30); // 테이블의 열의 폭 조정
JScrollPane scroll = new JScrollPane(table);
add("Center", scroll);
add("South", lblCount);
}
private void accDb() {
try {
Class.forName("org.mariadb.jdbc.Driver");
dispData();
} catch (Exception e) {
System.out.println("accDb err: " + e);
}
}
private void dispData() {
model.setNumRows(0); // table 초기화
try { // 추가 할 떄, 삭제 할 때 각 각 불러야 되기 때문
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "369369");
String sql = "SELECT * FROM sangdata"; // mariaDB는 Index 기본 Order by 되어 있음
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
int count = 0;
while (rs.next()) {
String[] temp = { rs.getString("code"), rs.getString("sang"), rs.getString("su"), rs.getString("dan") };
model.addRow(temp);
count++;
}
lblCount.setText("건수: " + count);
} catch (Exception e) {
System.out.println("dispData err: " + e);
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e2) {
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btnIns) { //상품 추가
InsertForm insertform = new InsertForm(this); //modal 이라서 insertform 불러오지 않으면 상품 등록 불가 //this 의 의미?
dispData(); //추가 후 목록 보기
}
// else if(e.getSource()==btnUpd) { //상품 수정 (생략) → 추가랑 다른 점: 선택한 줄의 데이터 프레임에 미리 출력됨
//
// }
else if(e.getSource()==btnDel) { //상품 삭제
String del = JOptionPane.showInputDialog(this, "삭제할 코드 번호 입력"); //input 넣고 사라지는 프레임 창
if (del == null) return;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "369369");
String sql = "DELETE FROM sangdata WHERE code=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, del);
if(pstmt.executeUpdate() == 0) {
JOptionPane.showMessageDialog(this, "삭제 가능한 상품이 없습니다.");
return;
}
// else { } 안써도 이미 update 실행 된것
JOptionPane.showMessageDialog(this, "삭제되었습니다");
dispData();
} catch (Exception e2) {
System.out.println("삭제 오류: " + e2);
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
} else if(e.getSource()==btnExt) { //상품 종료
int re = JOptionPane.showConfirmDialog(DbTest8CRUD.this, "정말 종료할까요?", "종료",
JOptionPane.OK_CANCEL_OPTION);
if (re == JOptionPane.OK_OPTION) {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e2) {
}
System.exit(0);
} else {
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
}
}
}
//추가를 위한 내부 클래스
class InsertForm extends JDialog implements ActionListener{
JTextField txtSang = new JTextField();
JTextField txtSu = new JTextField();
JTextField txtDan = new JTextField();
JButton btnOk = new JButton("등록");
JButton btnCncl = new JButton("취소");
public InsertForm(Frame frame) {
super(frame, "상품 추가");
setModal(true); //modal(sub창 닫기 전까지 다른 작업 못함) & modaless (다중 작업 가능)
JPanel pn1 = new JPanel(new GridLayout(4,2));
pn1.add(new JLabel("품명: ", JLabel.RIGHT));
pn1.add(txtSang);
pn1.add(new JLabel("수량: ", JLabel.RIGHT));
pn1.add(txtSu);
pn1.add(new JLabel("단가: ", JLabel.RIGHT));
pn1.add(txtDan);
pn1.add(btnOk);
pn1.add(btnCncl);
btnOk.addActionListener(this);
btnCncl.addActionListener(this);
add("North", new JLabel("자료 입력하기", JLabel.CENTER));
add("Center",pn1);
setBounds(310, 310, 150, 150);
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
dispose(); //하나의 Frame만 종료 시키기 위해서는 dispose() 메소드를 사용하여야 한다.
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btnOk) { //신상품 등록 추가
//입력자료 검사
if(txtSang.getText().equals("")) {
JOptionPane.showMessageDialog(this, "상품명 입력");
txtSang.requestFocus();
return; //이후 작업 못하게 함
} else if(txtSu.getText().equals("")) {
JOptionPane.showMessageDialog(this, "수량 입력");
txtSu.requestFocus();
return; //이후 작업 못하게 함
} else if(txtDan.getText().equals("")) {
JOptionPane.showMessageDialog(this, "단가 입력");
txtDan.requestFocus();
return; //이후 작업 못하게 함
}
//수량, 단가는 숫자 (유효성 검사)
int su = 0;
try {
su = Integer.parseInt(txtSu.getText());
} catch (Exception e2) {
JOptionPane.showMessageDialog(this, "수량은 숫자만 가능");
txtSu.requestFocus();
return; //이후 작업 못하게 함
}
int dan = 0;
try {
dan = Integer.parseInt(txtDan.getText());
} catch (Exception e2) {
JOptionPane.showMessageDialog(this, "수량은 숫자만 가능");
txtDan.requestFocus();
return; //이후 작업 못하게 함
}
//등록 가능한 상태
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "369369");
//신상 code 구하기 (하나씩 증가 - (MAX +1))
int new_code = 0;
String sql = "SELECT MAX(code) FROM sangdata";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
if(rs.next()) {
new_code = rs.getInt(1);
}
// System.out.println(new_code + 1);
sql = "INSERT INTO sangdata VALUES(?,?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, new_code + 1);
pstmt.setString(2, txtSang.getText().trim()); //trim(): 앞 뒤 공백지우기 (cf.rtrim, ltrim)
pstmt.setInt(3, su); //이미 위에서 숫자로 바꿈
pstmt.setInt(4, dan); //이미 위에서 숫자로 바꿈
if(pstmt.executeUpdate() > 0) {
JOptionPane.showMessageDialog(this, "등록 성공");
dispose();
} else {
JOptionPane.showMessageDialog(this, "등록 실패!");
}
} catch (Exception e2) {
} finally { //DB 필요없을 땐 끊어 주는 것
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e3) {
// TODO: handle exception
}
}
} else if(e.getSource()==btnCncl) { //입력자료 초기화
txtSang.setText("");
txtSu.setText("");
txtDan.setText("");
txtSang.requestFocus();
}
}
}
public static void main(String[] args) {
new DbTest8CRUD();
}
}
Comments