JAVA

210906_jframe,actionlistener

요옫 2021. 9. 7. 10:23

import java.awt.Color;

import java.awt.Container;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Vector;

 

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.table.DefaultTableModel;

 

import quiz.DbConn;

 

public class SwingStuDB extends JFrame  implements ActionListener{

 

DbConn db=new DbConn();

 

Container cp;

DefaultTableModel model;

JTable table;

JButton btnAdd,btnUpdate,btnDel;

 

//AddFrame생성

AddFrame addFrame=new AddFrame();

 

 

public SwingStuDB() {

super("스윙DB테이블");

 

cp=this.getContentPane();

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setBounds(200, 100, 500, 400);

cp.setBackground(new Color(255,255,200));

this.initDesign();

this.setVisible(true);

 

}

 

//테이블에 출력하는 메소드...1

public void tablewrite()

{

//테이블초기화

model.setRowCount(0);

 

Connection conn=null;

PreparedStatement pstmt=null;

ResultSet rs=null;

 

String sql="select * from student order by num asc";

 

conn=db.getCloudOracle();

try {

pstmt=conn.prepareStatement(sql);

rs=pstmt.executeQuery();

 

while(rs.next())

{

Vector<String>data=new Vector<String>();

data.add(rs.getString("num"));

data.add(rs.getString("name"));

data.add(rs.getString("ban"));

data.add(rs.getString("java"));

data.add(rs.getString("jsp"));

data.add(rs.getString("spring"));

data.add(rs.getString("total"));

data.add(rs.getString("average"));

 

//테이블에 추가

model.addRow(data);

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally {

db.dbClose(rs, pstmt, conn);

}

 

 

}

 

//insert메서드….2

public void insertData()

{

String name=addFrame.tfName.getText();

String java=addFrame.tfJava.getText();

String jsp=addFrame.tfJsp.getText();

String spring=addFrame.tfSpring.getText();

String ban=(String)addFrame.cbBan.getSelectedItem();

 

int tot=Integer.parseInt(java)+Integer.parseInt(jsp)+Integer.parseInt(spring);

double avg=tot/3.0;

 

String sql="insert into student values(seq_test.nextval,?,?,?,?,?,?,?)";

 

Connection conn=null;

PreparedStatement pstmt=null;

 

conn=db.getCloudOracle();

try {

pstmt=conn.prepareStatement(sql);

 

pstmt.setString(1, name);

pstmt.setString(2, java);

pstmt.setString(3, jsp);

pstmt.setString(4, spring);

pstmt.setInt(5, tot);

pstmt.setDouble(6, avg);

pstmt.setString(7, ban);

 

pstmt.execute();

 

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally {

db.dbClose(pstmt, conn);

}

}

 

//삭제 메서드

public void deleteData(String num)

{

 

System.out.println("nim="+num);

//sql문

String sql="delete from student where num="+num;

 

//db연결

Connection conn=null;

Statement stmt=null;

 

conn=db.getCloudOracle();

try {

stmt=conn.createStatement();

int n= stmt.executeUpdate(sql);

 

//sql문 실행후 해당번호없을때 메세지,삭제되면 tablewrite다시호출

if(n==0)

JOptionPane.showMessageDialog(this, "없는데이타 번호입니다");

else

tablewrite();

 

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally {

db.dbClose(stmt, conn);

}

}

 

public void initDesign()

{

String []title= {"번호","이름","반","Java","Jsp","Spring","총점","평균"};

model=new DefaultTableModel(title, 0);

table=new JTable(model);

this.add("Center",new JScrollPane(table));

 

//테이블에 전체데이타 출력 

tablewrite();

 

JPanel pTop=new JPanel();

this.add("North", pTop);

 

btnAdd=new JButton("추가");

btnAdd.addActionListener(this);  //메인add액션

pTop.add(btnAdd);

 

btnDel=new JButton("삭제");

btnDel.addActionListener(this);  //메인 del액

pTop.add(btnDel);

 

btnUpdate=new JButton("수정");

btnUpdate.addActionListener(this); //메인update액션 추가

pTop.add(btnUpdate);

 

addFrame.btnAdd.addActionListener(this); //AddFrame의 추가버튼

}

 

@Override

public void actionPerformed(ActionEvent e) {

 

Object ob=e.getSource();

 

if(ob==btnAdd)

{

addFrame.setVisible(true);

}else if(ob==addFrame.btnAdd)

{

//입력데이타 읽어와서 db추가

insertData();

//테이블 다시출력

this.tablewrite();

//초기화

addFrame.tfName.setText("");

addFrame.tfJava.setText("");

addFrame.tfJsp.setText("");

addFrame.tfSpring.setText("");

addFrame.tfName.requestFocus();

 

//추가폼은 사라져야

addFrame.setVisible(false);

}

 

else if(ob==btnDel)

{

String num=JOptionPane.showInputDialog("삭제할 데이타의 번호를 입력해 주세요");

deleteData(num);  //데이타 삭제

}else if(ob==btnUpdate)

{

System.out.println("update");

}

}

 

public static void main(String[] args) {

 

new SwingStuDB();

}

}

 

 

AddFrame

package day0906;

 

import java.awt.Color;

import java.awt.Container;

 

import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JTextField;

 

public class AddFrame extends JFrame{

 

Container cp;

JTextField tfName,tfJava,tfJsp,tfSpring;

JComboBox<String> cbBan;

JButton btnAdd;

 

public AddFrame() {

super("데이타입력폼");

cp=this.getContentPane();

//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setBounds(200, 100, 200, 250);

cp.setBackground(new Color(255,255,200));

this.initDesign();

//this.setVisible(true);

}

 

public void initDesign()

{

this.setLayout(null);

JLabel title1=new JLabel("이름");

JLabel title2=new JLabel("반");

JLabel title3=new JLabel("JAVA");

JLabel title4=new JLabel("JSP");

JLabel title5=new JLabel("SPRING");

 

title1.setBounds(30, 10, 50, 30);

this.add(title1);

title2.setBounds(30, 40, 50, 30);

this.add(title2);

title3.setBounds(30, 70, 50, 30);

this.add(title3);

title4.setBounds(30, 100, 50, 30);

this.add(title4);

title5.setBounds(30, 130, 50, 30);

this.add(title5);

 

 

tfName=new JTextField(4);

tfJava=new JTextField(3);

tfJsp=new JTextField(3);

tfSpring=new JTextField(3);

 

String[] ban= {"a반","b반","c반","d반"};

cbBan=new JComboBox<String>(ban);

 

 

tfName.setBounds(100, 15, 70, 25);

this.add(tfName);

cbBan.setBounds(100, 45, 70, 25);

this.add(cbBan);

tfJava.setBounds(100, 75, 70, 25);

this.add(tfJava);

tfJsp.setBounds(100, 105, 70, 25);

this.add(tfJsp);

tfSpring.setBounds(100, 135, 70, 25);

this.add(tfSpring);

 

btnAdd=new JButton("추가");

btnAdd.setBounds(70, 170, 60, 20);

this.add(btnAdd);

}

 

// public static void main(String[] args) {

// new AddFrame();

// }   //디자인 확인후 주석...메인에서 호출할것이므로

}

 

 

UpdateFrame_수정폼_AddFrame 복사해서 변수수정

 

package day0906;

 

import java.awt.Color;

import java.awt.Container;

 

import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JTextField;

 

public class UpdateFrame extends JFrame{

 

Container cp;

JTextField tfName,tfJava,tfJsp,tfSpring;

JComboBox<String> cbBan;

JButton btnMod;  //수정후 메인으로 전송할버튼

String num;  //수정할 번호

 

public UpdateFrame() {

super("수정폼");

cp=this.getContentPane();

//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setBounds(200, 100, 200, 250);

cp.setBackground(new Color(155,155,200));

this.initDesign();

//this.setVisible(true);

}

 

public void initDesign()

{

this.setLayout(null);

JLabel title1=new JLabel("이름");

JLabel title2=new JLabel("반");

JLabel title3=new JLabel("JAVA");

JLabel title4=new JLabel("JSP");

JLabel title5=new JLabel("SPRING");

 

title1.setBounds(30, 10, 50, 30);

this.add(title1);

title2.setBounds(30, 40, 50, 30);

this.add(title2);

title3.setBounds(30, 70, 50, 30);

this.add(title3);

title4.setBounds(30, 100, 50, 30);

this.add(title4);

title5.setBounds(30, 130, 50, 30);

this.add(title5);

 

tfName=new JTextField(4);

tfJava=new JTextField(3);

tfJsp=new JTextField(3);

tfSpring=new JTextField(3);

 

String[] ban= {"a반","b반","c반","d반"};

cbBan=new JComboBox<String>(ban);

 

tfName.setBounds(100, 15, 70, 25);

this.add(tfName);

cbBan.setBounds(100, 45, 70, 25);

this.add(cbBan);

tfJava.setBounds(100, 75, 70, 25);

this.add(tfJava);

tfJsp.setBounds(100, 105, 70, 25);

this.add(tfJsp);

tfSpring.setBounds(100, 135, 70, 25);

this.add(tfSpring);

 

btnMod=new JButton("수정");

btnMod.setBounds(70, 170, 60, 20);

this.add(btnMod);

}

 

// public static void main(String[] args) {

// new UpdateFrame();

// }

}



Q. 문제

수정버튼 누르면 몇번을 수정하시겠습니까?

4번누르면 4번이 가지고 있는 데이타를 UpdateFrame 창에 표시하여 열린다

데이타 수정후 수정버튼 누르면 수정폼 사라지고 메인창에 수정된 내용이 보여야 한다

 

캡쳐 2개_수정전,다이얼로그창에 번호입력한것,수정된거 캡쳐

 

카페:  0906_스윙jdbc_홍길동

 

}else if(ob==btnUpdate)

{

//System.out.println("update");

String num=JOptionPane.showInputDialog("수정할 데이터의 번호를 입력하세요");

 

String sql="select * from student where num="+num;

 

Connection conn=null;

Statement stmt=null;

ResultSet rs=null;

 

conn=db.getCloudOracle();

try {

stmt=conn.createStatement();

rs=stmt.executeQuery(sql);

 

//전체데이타 조회는 while,하나의 데이터 조회는 if

if(rs.next())//데이타가 있는경우

{

uFrame.num=num; //프레임에는 없으나 반드시 해당num값 넘긴다

uFrame.tfName.setText(rs.getString("name"));

uFrame.tfJava.setText(rs.getString("java"));

uFrame.tfJsp.setText(rs.getString("jsp"));

uFrame.tfSpring.setText(rs.getString("spring"));

uFrame.cbBan.setSelectedItem(rs.getString("ban"));

 

uFrame.setVisible(true);

}else

{

//데이타가 없는경우

JOptionPane.showMessageDialog(this, "해당번호는 없는 데이타 입니다");

}

 

} catch (SQLException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}finally {

db.dbClose(rs, stmt, conn);

}

//요기까지 한후 메인의 수정창을 누르면 해당num의 데이터가 수정창에 표기되는지 확인후 update한다

}else if(ob==uFrame.btnMod)

{

updateData();

tablewrite();

uFrame.setVisible(false);

}

}

 

//update

public void updateData()

{

String num=uFrame.num;

String name=uFrame.tfName.getText();

String java=uFrame.tfJava.getText();

String jsp=uFrame.tfJsp.getText();

String spring=uFrame.tfSpring.getText();

String ban=(String)uFrame.cbBan.getSelectedItem();

 

int tot=Integer.parseInt(java)+Integer.parseInt(jsp)+Integer.parseInt(spring);

double avg=tot/3.0;

 

String sql="update student set "

+ "name=?,java=?,jsp=?,spring=?,total="+tot+",average="+avg+",ban=? "

+ "where num="+num;

 

System.out.println(sql);

 

Connection conn=null;

PreparedStatement pstmt=null;

 

conn=db.getCloudOracle();

try {

pstmt=conn.prepareStatement(sql);

pstmt.setString(1, name);

pstmt.setString(2, java);

pstmt.setString(3, jsp);

pstmt.setString(4, spring);

pstmt.setString(5, ban);

 

pstmt.execute();

} catch (SQLException e) {

}finally {

db.dbClose(pstmt, conn);

}

}