2013년 7월 7일 일요일

(130705~130707) JavaProject.java, JavaProject2.java (개인 Project - Swing과 JDBC를 이용한 음반 관리 프로그램)

 - 소스
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;

import javax.swing.ButtonGroup;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class JavaProject extends JFrame implements ActionListener, ListSelectionListener{

JPanel leftPanel, centerPanel, rightPanel;
JPanel left1, left2, left3, left4, left5, left6, left7, left8;
JLabel leftlb, left1lb, left2lb, left3lb, left4lb, left5lb, left6lb, left7lb, centerlb;
JTextField left1tf, left2tf, left3tf, left4tf;
JComboBox<String> combo; // 장르
String [] genre = {"가요", "댄스", "힙합", "Rock", "Pop", "재즈", "OST"};
JRadioButton regular, single;
ButtonGroup group;
JButton imgbutton; // 사진등록
JButton b1, b2, b3, b4, b5;

JList<String> list; // 데이터베이스 내용을 뿌려주기 위한 리스트 선언

Vector<String> listdata = new Vector<>(); // 리스트를 위한 벡터 선언
int selected; //현제 선택된 아이템의 번지를 기억

JLabel imgLabel1 = new JLabel(); // 사진을 출력하기 위한 첫번째 Label

String path = ""; // 사진의 경로를 저장하는 변수
String name = ""; // 사진의 이름을 저장하는 변수

// DB 연동을 위한 준비

String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
String id = "system";
String pass = "123456";
Connection con;
PreparedStatement pstmt;
ResultSet rs;

public JavaProject(){

// 닫기 버튼을 누르면 메모리에서 해제
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

leftPanel = new JPanel();

centerPanel = new JPanel();
rightPanel = new JPanel();

left1 = new JPanel(); // 가수이름을 위한 Panel

left2 = new JPanel(); // 음반명을 위한 Panel
left3 = new JPanel(); // 발매일을 위한 Panel
left4 = new JPanel(); // 가격을 위한 Panel
left5 = new JPanel(); // 장르를 위한 Panel
left6 = new JPanel(); // 음반종류를 위한 Panel
left7 = new JPanel(); // 사진등록을 위한 Panel
left8 = new JPanel(); // 버튼을 위한 Panel

leftlb = new JLabel("  음  반  관  리  프  로  그  램  ");

left1lb = new JLabel(" 가 수 이 름 : ");
left2lb = new JLabel(" 음   반   명 : ");
left3lb = new JLabel(" 발   매   일 : ");
left4lb = new JLabel(" 가          격 : ");
left5lb = new JLabel(" 장          르 : ");
left6lb = new JLabel(" 음 반 종 류 : ");
left7lb = new JLabel(" 사 진 등 록 : ");
centerlb = new JLabel(" 음 반 정 보 출 력  ");

left1tf = new JTextField(15); // 가수이름을 위한 TextFeild

left2tf = new JTextField(15); // 음반명을 위한 TextFeild
left3tf = new JTextField(15); // 발매일을 위한 TextFeild
left4tf = new JTextField(15); // 가격을 위한 TextFeild

combo = new JComboBox<String>(genre); // 장르를 위한 ComboBox


regular = new JRadioButton("정규앨범");

single = new JRadioButton("싱글앨범"); // 음반종류를 위한 RadioButton
group = new ButtonGroup(); // RadioButton 그룹핑
group.add(regular);
group.add(single);

imgbutton = new JButton("사진등록"); // 사진등록을 위한 버튼


b1 = new JButton("입력"); // 버튼 4개 선언

b2 = new JButton("수정");
b3 = new JButton("삭제");
b4 = new JButton("검색");
b5 = new JButton("주문");

list = new JList<String>(listdata); // 데이터베이스로부터 받아온 정보를 뿌려주기 위한 List 선언


left1.add(left1lb); // 가수이름

left1.add(left1tf);

left2.add(left2lb); // 음반명

left2.add(left2tf);

left3.add(left3lb); // 발매일

left3.add(left3tf);

left4.add(left4lb); // 가격

left4.add(left4tf);

left5.add(left5lb); // 장르

left5.add(combo);

left6.add(left6lb); // 음반종류

left6.add(regular);
left6.add(single);

left7.add(left7lb); // 사진등록

left7.add(imgbutton);

left8.add(b1); // 버튼

left8.add(b2);
left8.add(b3);
left8.add(b4);
left8.add(b5);

b1.addActionListener(this);

b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
list.addListSelectionListener(this);
imgbutton.addActionListener(this);

leftPanel.setLayout(new GridLayout(9, 1));

leftPanel.add(leftlb); // 음반관리프로그램 라벨
leftPanel.add(left1); // 가수이름
leftPanel.add(left2); // 음반명
leftPanel.add(left3); // 발매일
leftPanel.add(left4); // 가격
leftPanel.add(left5); // 장르
leftPanel.add(left6); // 음반종류
leftPanel.add(left7); // 사진등록
leftPanel.add(left8); // 버튼

centerPanel.setLayout(new BorderLayout()); // List

centerPanel.add("North", centerlb);
centerPanel.add(list);

JLabel imgLabel2 = new JLabel(" "); // 사진을 출력하기 위한 첫번째 Label

imgLabel1.setPreferredSize(new Dimension(300,400));  // 출력할 사진의 사이즈를 설정
rightPanel.setLayout(new BorderLayout());
rightPanel.setBorder(new TitledBorder(new LineBorder(Color.black, 1), " 음 반 사 진 출 력 ")); // 사진을 출력한 자리를 set
rightPanel.add("North", imgLabel1); // imgLabel1을 North에 붙임
rightPanel.add("Center", imgLabel2); // imgLabel2를 Center에 붙임

// 프레임의 레이아웃 생성 후 배치

setLayout(new GridLayout(1, 3)); // 전체적인 틀을 Frame에 붙임
this.add(leftPanel);
this.add(centerPanel);
this.add(rightPanel);

setTitle("음반관리 프로그램");

setSize(1050,450);
setVisible(true);

con(); // 데이터 베이스에 접근 가능하도록 커넥션을 설정

}


@Override

public void actionPerformed(ActionEvent arg0) {
String value = arg0.getActionCommand(); // 버튼의 라벨값을 리턴
JavaProject2 project2;

if(value.equals("사진등록"))

{
// file 선택하기
JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION)
{
path = chooser.getSelectedFile().getPath(); // 파일 경로
name = chooser.getSelectedFile().getName(); // 파일 이름
imgLabel1.setIcon(new ImageIcon(path)); // 사진을 Label1에 붙임
}
// System.out.println(path);
// System.out.println(name);
}

if(value.equals("입력"))

this.insertAlbum();

if(value.equals("수정")){

this.updateAlbum();
this.getAllAlbum();
}

if(value.equals("삭제")){

this.deleteAlbum();
this.getAllAlbum();
}

if(value.equals("검색"))

this.getAllAlbum();

if(value.equals("주문"))

project2 = new JavaProject2(left1tf.getText(), left2tf.getText(), left4tf.getText()); // 주문 Dialog에 가수이름, 음반명, 가격을 넘김
}


@Override

public void valueChanged(ListSelectionEvent arg0) {
try{
String value = list.getSelectedValue(); // list에 선택된 값을 리턴
selected = list.getSelectedIndex(); // 선택되어있던 list의 index 값을 리턴

// 데이터를 쪼개서 멤버에 넣어줌

String str [] = value.split(" ");
left1tf.setText(str[0]);
left2tf.setText(str[1]);
left3tf.setText(str[2]);
left4tf.setText(str[3]);
combo.setSelectedItem(str[4]); // setSelectedItem() - ComboBox 내용을 가져옴;

if(str[5].equals("정규앨범"))

regular.setSelected(true); // setSelected() - RadioButton 내용을 가져옴;
else
single.setSelected(true);

String arr [] = str[6].split("\\\\"); // 저장되어있는 path를 읽어오기 위한 작업

String path2 = "";
for(int i=0 ; i<arr.length ; i++)
path2 = path2 + arr[i] + "\\\\";

imgLabel1.setIcon(new ImageIcon(path2)); // DB에서 가져온 path를 인식할 수 있도록 수정해서 Label에 붙임

// System.out.println(path2);
} catch (Exception e){
}
}


public static void main(String[] args) {

new JavaProject();
}


// 데이터 베이스에 접근 가능하도록 커넥션을 설정

public void con(){
try{
// 어느 데이터베이스를 사용할 것인지를 설정
Class.forName("oracle.jdbc.driver.OracleDriver"); // 대소문자 구문
// 실제 데이터 베이스에 접근하기 위한 소스를 작성 == 접속완료되면 커넥션을 리턴
con = DriverManager.getConnection(url, id, pass);
System.out.println("오라클에 접속 완료");
} catch (Exception e){
e.printStackTrace();
}
}


// 입력 버튼을 누르면 실행되는 메소드

public void insertAlbum(){
try {
String str = null;

// 모든 데이터를 가져오시오

String sql = "insert into album values(?, ?, ?, ?, ?, ?, ?)";
// 쿼리를 날리기위한 객체를 선언
pstmt = con.prepareStatement(sql);
// ?에 데이터를 입력
pstmt.setString(1, left1tf.getText()); // SNAME : 가수이름
pstmt.setString(2, left2tf.getText()); // ANAME : 음반명
pstmt.setInt(3, Integer.parseInt(left3tf.getText())); // ADATE : 발매일
pstmt.setInt(4, Integer.parseInt(left4tf.getText())); // PRICE : 가격
pstmt.setString(5, String.valueOf(combo.getSelectedItem())); // GENRE : 장르

if(regular.isSelected()) // KIND

str = regular.getText();
else
str = single.getText();
pstmt.setString(6, str); // KIND
pstmt.setString(7, path); // IMGPATH

// 쿼리실행 = 데이터를 돌려 받을때

pstmt.executeUpdate();
// 다 썻으면 자원을 닫아라
pstmt.close();

} catch (Exception e) {

e.printStackTrace();
}
getAllAlbum(); // 검색 메소드
}


// 검색 버튼을 누르면 실행되는 메소드

public void getAllAlbum(){
listdata.removeAllElements(); // 리스트의 내용을 모두 지워서 초기화시킴
String sql = "select * from album";
try{

pstmt = con.prepareStatement(sql);

// 결과를 리턴 받기에 resultset 객체를 선언해서 받음
rs = pstmt.executeQuery();

// 반복문을 이용하여 데이터를 가져와서 리스트에 붙임

while(rs.next()){
String total = "";
total += rs.getString(1)+" ";
total += rs.getString(2)+" ";
total += rs.getInt(3)+" ";
total += rs.getInt(4)+" ";
total += rs.getString(5)+" ";
total += rs.getString(6)+" ";
total += rs.getString(7);

// 벡터에 부착

listdata.add(total);
}
rs.close();
pstmt.close();

} catch (Exception e){

e.printStackTrace();
}
// 백터에 있는 데이터를 리스트에 부착
list.setListData(listdata);
}


// 수정 버튼을 누르면 실행되는 메소드

// 가수이름을 중심으로 음반명과 가격을 수정
private void updateAlbum(){
String aname = left2tf.getText().trim();
String price = left4tf.getText().trim();
String sname = left1tf.getText().trim();
String sql = "update album set aname = ?, price = ? where sname = ?";
try {
// 쿼리를 날리기위한 객체를 선언
pstmt = con.prepareStatement(sql);
pstmt.setString(1, aname);
pstmt.setInt(2, Integer.parseInt(price));
pstmt.setString(3, sname);

// 쿼리실행 = 데이터를 돌려 받을때

pstmt.executeUpdate();
// 다 썻으면 자원을 닫아라
pstmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}


// 삭제 버튼을 누르면 실행되는 메소드

// 가수이름을 중심으로 그에 대한 모든 내용을 삭제
private void deleteAlbum(){
String sname = left1tf.getText().trim();
String sql = "delete from album where sname = ?";
try {
// 쿼리를 날리기위한 객체를 선언
pstmt = con.prepareStatement(sql);
pstmt.setString(1, sname);

// 쿼리실행 = 데이터를 돌려 받을때

pstmt.executeUpdate();
// 다 썻으면 자원을 닫아라
pstmt.close();

} catch (Exception e) {

e.printStackTrace();
}
listdata.remove(selected); // 선택되어있던 리스트의 내용을 삭제
}
}


class JavaProject2 extends JDialog{ // 새창 (Dialog)을 위한 Class 선언

JLabel label1 = new JLabel(""); // 가수이름
JLabel label2 = new JLabel(""); // 음반명
JLabel label3 = new JLabel(""); // 가격
JLabel label4 = new JLabel(""); // 주문 완료되었습니다.

// JavaProjcet 클래스에서 받아온 회원 정보를 새로운 프레임에 Label 형식으로 붙임

public JavaProject2 (String str1, String str2, String str3){
label1.setText(" 가수이름 : " + str1.toString());
label2.setText(" 음 반 명 : " + str2.toString());
label3.setText(" 가      격 : " + str3.toString());
label4.setText(" 주문 완료되었습니다. ");

JPanel panel = new JPanel();

panel.setLayout(new GridLayout(4, 1));
panel.add(label1);
panel.add(label2);
panel.add(label3);
panel.add(label4);
this.add(panel);

this.setTitle("주문내역");

this.setSize(220,220);
this.setModal(true);
this.setVisible(true);
}
}


 - 데이터베이스 테이블




























 - 프로그램 메인


















 - 검색



















 - 입력




































 - 수정



















 - 삭제



















 - ListSelectionEvent를 이용해서 정보 가져오기



















 - 주문