본문으로 바로가기

[GUI]Jlist를 이용한 전화목록 구현

category 카테고리 없음 2021. 1. 14. 17:53
728x90
반응형
SMALL

스프링 적용뒤

 

 

코드

package GUI;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.SpringLayout;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTextField;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.Color;
import java.awt.SystemColor;
import javax.swing.UIManager;

public class ex02_jlist {

	private JFrame frame;
	private JTextField txt_msg;
	private JList list;
	private JLabel lbl_text;
//	==========================================
	
	
	private DefaultListModel model;
	private int row;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ex02_jlist window = new ex02_jlist();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public ex02_jlist() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.getContentPane().setBackground(SystemColor.menu);
		frame.setBounds(100, 100, 650, 400);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		SpringLayout springLayout = new SpringLayout();
		frame.getContentPane().setLayout(springLayout);
		
		JScrollPane scrollPane = new JScrollPane();
		springLayout.putConstraint(SpringLayout.NORTH, scrollPane, 10, SpringLayout.NORTH, frame.getContentPane());
		springLayout.putConstraint(SpringLayout.WEST, scrollPane, 10, SpringLayout.WEST, frame.getContentPane());
		springLayout.putConstraint(SpringLayout.SOUTH, scrollPane, 265, SpringLayout.NORTH, frame.getContentPane());
		springLayout.putConstraint(SpringLayout.EAST, scrollPane, 306, SpringLayout.WEST, frame.getContentPane());
		frame.getContentPane().add(scrollPane);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBackground(SystemColor.control);
		springLayout.putConstraint(SpringLayout.NORTH, panel_1, 17, SpringLayout.SOUTH, scrollPane);
		springLayout.putConstraint(SpringLayout.WEST, panel_1, 10, SpringLayout.WEST, frame.getContentPane());
		springLayout.putConstraint(SpringLayout.SOUTH, panel_1, 86, SpringLayout.SOUTH, scrollPane);
		
		//===============================
		//JList를 제어하기 위하 model객체 생성
		model =new DefaultListModel();
		 list = new JList(model);
		list.addMouseListener(new MouseAdapter() {	
			@Override
			public void mouseClicked(MouseEvent e) {
			String item=list.getSelectedValue().toString(); //list를 클릭했을 때 데이터 가져오기
			
			//Jlabel에 출력
			lbl_text.setText(item);
			
		}
	});
		list.setBackground(SystemColor.activeCaption);
		list.setForeground(Color.WHITE);
		model=(DefaultListModel) list.getModel();
		//===============================
		
		scrollPane.setViewportView(list);
		springLayout.putConstraint(SpringLayout.EAST, panel_1, 624, SpringLayout.WEST, frame.getContentPane());
		frame.getContentPane().add(panel_1);
		SpringLayout sl_panel_1 = new SpringLayout();
		panel_1.setLayout(sl_panel_1);
		
		txt_msg = new JTextField();
		sl_panel_1.putConstraint(SpringLayout.NORTH, txt_msg, 17, SpringLayout.NORTH, panel_1);
		sl_panel_1.putConstraint(SpringLayout.WEST, txt_msg, 10, SpringLayout.WEST, panel_1);
		sl_panel_1.putConstraint(SpringLayout.SOUTH, txt_msg, -10, SpringLayout.SOUTH, panel_1);
		sl_panel_1.putConstraint(SpringLayout.EAST, txt_msg, 362, SpringLayout.WEST, panel_1);
		panel_1.add(txt_msg);
		txt_msg.setColumns(10);
		//===========================================================
		JButton addBtn = new JButton("\uD56D\uBAA9\uCD94\uAC00");
		addBtn.setForeground(SystemColor.textHighlightText);
		addBtn.setBackground(SystemColor.controlText);
		addBtn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				//사용자가 입력한 데이터를 콘솔창에 출력하시오.
				
			String data=txt_msg.getText();
			
			System.out.println(data);
			
			//클릭시, list에 데이터 추가하기
			model.addElement(data);
			}
		});
		
		//===========================================================
		addBtn.setFont(new Font("바탕체", Font.BOLD, 15));
		sl_panel_1.putConstraint(SpringLayout.NORTH, addBtn, 0, SpringLayout.NORTH, txt_msg);
		sl_panel_1.putConstraint(SpringLayout.WEST, addBtn, 23, SpringLayout.EAST, txt_msg);
		sl_panel_1.putConstraint(SpringLayout.SOUTH, addBtn, 0, SpringLayout.SOUTH, txt_msg);
		addBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				
			}
		});
		panel_1.add(addBtn);
		
		JButton removeBtn = new JButton("\uD56D\uBAA9\uC0AD\uC81C");
		removeBtn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				//list를 클릭했을 때 데이터 가져오기
				row=list.getSelectedIndex();
				model.remove(row);
				
			}
		});
		removeBtn.setForeground(SystemColor.textHighlightText);
		removeBtn.setBackground(SystemColor.controlText);
		removeBtn.setFont(new Font("바탕체", Font.BOLD, 15));
		sl_panel_1.putConstraint(SpringLayout.EAST, addBtn, -6, SpringLayout.WEST, removeBtn);
		sl_panel_1.putConstraint(SpringLayout.EAST, removeBtn, -23, SpringLayout.EAST, panel_1);
		sl_panel_1.putConstraint(SpringLayout.WEST, removeBtn, 491, SpringLayout.WEST, panel_1);
		sl_panel_1.putConstraint(SpringLayout.NORTH, removeBtn, 0, SpringLayout.NORTH, txt_msg);
		sl_panel_1.putConstraint(SpringLayout.SOUTH, removeBtn, 0, SpringLayout.SOUTH, txt_msg);
		panel_1.add(removeBtn);
		
		JPanel panel = new JPanel();
		panel.setBackground(SystemColor.window);
		springLayout.putConstraint(SpringLayout.NORTH, panel, 10, SpringLayout.NORTH, frame.getContentPane());
		springLayout.putConstraint(SpringLayout.WEST, panel, 6, SpringLayout.EAST, scrollPane);
		springLayout.putConstraint(SpringLayout.SOUTH, panel, -17, SpringLayout.NORTH, panel_1);
		springLayout.putConstraint(SpringLayout.EAST, panel, 318, SpringLayout.EAST, scrollPane);
		frame.getContentPane().add(panel);
		SpringLayout sl_panel = new SpringLayout();
		panel.setLayout(sl_panel);
		
		 lbl_text = new JLabel("New label");
		sl_panel.putConstraint(SpringLayout.NORTH, lbl_text, 79, SpringLayout.NORTH, panel);
		sl_panel.putConstraint(SpringLayout.WEST, lbl_text, 23, SpringLayout.WEST, panel);
		sl_panel.putConstraint(SpringLayout.SOUTH, lbl_text, 171, SpringLayout.NORTH, panel);
		sl_panel.putConstraint(SpringLayout.EAST, lbl_text, -58, SpringLayout.EAST, panel);
		panel.add(lbl_text);
	}
}

 

 


grid-정렬된 폼

 

위에 내가 사용하는 변수들을 전역으로 선언해주고

전역에 선언된 변수명들은 메서드 로 내려와서 생성자를 지워줘도 된다.

풀코드

package guicontact;

import java.awt.EventQueue;

import javax.swing.JFrame;
import java.awt.GridLayout;
import javax.swing.JPanel;
import javax.swing.SpringLayout;
import javax.swing.JScrollPane;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.SystemColor;
import java.awt.Color;
import javax.swing.SwingConstants;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class ContactView {

	//사용한 컴포넌트 변수들을 선언
	private JFrame frame;
	private JLabel lbl_name,lbl_age,lbl_number;
	private JButton addBtn, removeBtn, selectAllBtn;
    private JList contact_list;
    
    //JList를 제어할model객체 선언
    private DefaultListModel model;
    
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ContactView window = new ContactView();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public ContactView() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 700, 400);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(new GridLayout(1, 0, 0, 0));
		
		JPanel panel = new JPanel();
		frame.getContentPane().add(panel);
		panel.setLayout(new GridLayout(1, 0, 0, 0));
		
		JPanel panel_1 = new JPanel();
		panel.add(panel_1);
		SpringLayout sl_panel_1 = new SpringLayout();
		panel_1.setLayout(sl_panel_1);
		
		JPanel panel_header = new JPanel();
		panel_header.setBackground(SystemColor.windowBorder);
		panel_header.setToolTipText("");
		sl_panel_1.putConstraint(SpringLayout.NORTH, panel_header, 10, SpringLayout.NORTH, panel_1);
		sl_panel_1.putConstraint(SpringLayout.WEST, panel_header, 10, SpringLayout.WEST, panel_1);
		sl_panel_1.putConstraint(SpringLayout.SOUTH, panel_header, 83, SpringLayout.NORTH, panel_1);
		sl_panel_1.putConstraint(SpringLayout.EAST, panel_header, 674, SpringLayout.WEST, panel_1);
		panel_1.add(panel_header);
		
		JPanel panel_info = new JPanel();
		panel_info.setBackground(new Color(154, 205, 50));
		sl_panel_1.putConstraint(SpringLayout.NORTH, panel_info, 6, SpringLayout.SOUTH, panel_header);
		sl_panel_1.putConstraint(SpringLayout.WEST, panel_info, 342, SpringLayout.WEST, panel_1);
		sl_panel_1.putConstraint(SpringLayout.SOUTH, panel_info, 199, SpringLayout.SOUTH, panel_header);
		sl_panel_1.putConstraint(SpringLayout.EAST, panel_info, -10, SpringLayout.EAST, panel_1);
		panel_1.add(panel_info);
		
		JPanel panel_btn = new JPanel();
		panel_btn.setBackground(SystemColor.info);
		sl_panel_1.putConstraint(SpringLayout.NORTH, panel_btn, 6, SpringLayout.SOUTH, panel_info);
		sl_panel_1.putConstraint(SpringLayout.WEST, panel_btn, 0, SpringLayout.WEST, panel_header);
		sl_panel_1.putConstraint(SpringLayout.SOUTH, panel_btn, -10, SpringLayout.SOUTH, panel_1);
		sl_panel_1.putConstraint(SpringLayout.EAST, panel_btn, 0, SpringLayout.EAST, panel_header);
		panel_1.add(panel_btn);
		SpringLayout sl_panel_btn = new SpringLayout();
		panel_btn.setLayout(sl_panel_btn);
		
		addBtn = new JButton("\uC5F0\uB77D\uCC98 \uCD94\uAC00");
		addBtn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				//버튼을 클릭 시, ContactAddView 띄우기
				new ContactAddView().main(null);
			}
		});
		
		
		addBtn.setFont(new Font("굴림", Font.BOLD, 20));
		sl_panel_btn.putConstraint(SpringLayout.NORTH, addBtn, 10, SpringLayout.NORTH, panel_btn);
		sl_panel_btn.putConstraint(SpringLayout.WEST, addBtn, 89, SpringLayout.WEST, panel_btn);
		sl_panel_btn.putConstraint(SpringLayout.SOUTH, addBtn, -10, SpringLayout.SOUTH, panel_btn);
		panel_btn.add(addBtn);
		
		removeBtn = new JButton("\uC5F0\uB77D\uCC98 \uC0AD\uC81C");
		removeBtn.setFont(new Font("굴림", Font.BOLD, 18));
		removeBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			}
		});
		sl_panel_btn.putConstraint(SpringLayout.EAST, addBtn, -6, SpringLayout.WEST, removeBtn);
		sl_panel_btn.putConstraint(SpringLayout.NORTH, removeBtn, 10, SpringLayout.NORTH, panel_btn);
		sl_panel_btn.putConstraint(SpringLayout.WEST, removeBtn, 253, SpringLayout.WEST, panel_btn);
		sl_panel_btn.putConstraint(SpringLayout.SOUTH, removeBtn, -10, SpringLayout.SOUTH, panel_btn);
		panel_btn.add(removeBtn);
		
		selectAllBtn = new JButton("\uC804\uCCB4\uBCF4\uAE30");
		selectAllBtn.setFont(new Font("굴림", Font.BOLD, 20));
		selectAllBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			}
		});
		sl_panel_btn.putConstraint(SpringLayout.WEST, selectAllBtn, 399, SpringLayout.WEST, panel_btn);
		sl_panel_btn.putConstraint(SpringLayout.EAST, selectAllBtn, -126, SpringLayout.EAST, panel_btn);
		sl_panel_btn.putConstraint(SpringLayout.EAST, removeBtn, -6, SpringLayout.WEST, selectAllBtn);
		sl_panel_btn.putConstraint(SpringLayout.NORTH, selectAllBtn, 0, SpringLayout.NORTH, addBtn);
		sl_panel_btn.putConstraint(SpringLayout.SOUTH, selectAllBtn, -10, SpringLayout.SOUTH, panel_btn);
		panel_btn.add(selectAllBtn);
		
		JScrollPane contact_scroll = new JScrollPane();
		sl_panel_1.putConstraint(SpringLayout.NORTH, contact_scroll, 6, SpringLayout.SOUTH, panel_header);
		sl_panel_1.putConstraint(SpringLayout.WEST, contact_scroll, 0, SpringLayout.WEST, panel_header);
		sl_panel_1.putConstraint(SpringLayout.SOUTH, contact_scroll, 199, SpringLayout.SOUTH, panel_header);
		SpringLayout sl_panel_header = new SpringLayout();
		panel_header.setLayout(sl_panel_header);
		
		JLabel lblNewLabel_3 = new JLabel("\uC804\uD654\uBAA9\uB85D");
		sl_panel_header.putConstraint(SpringLayout.NORTH, lblNewLabel_3, 10, SpringLayout.NORTH, panel_header);
		sl_panel_header.putConstraint(SpringLayout.WEST, lblNewLabel_3, 258, SpringLayout.WEST, panel_header);
		sl_panel_header.putConstraint(SpringLayout.SOUTH, lblNewLabel_3, -10, SpringLayout.SOUTH, panel_header);
		lblNewLabel_3.setFont(new Font("굴림", Font.BOLD, 35));
		panel_header.add(lblNewLabel_3);
		sl_panel_1.putConstraint(SpringLayout.EAST, contact_scroll, -6, SpringLayout.WEST, panel_info);
		panel_info.setLayout(new GridLayout(3, 2, 0, 0));
		
		JLabel lblNewLabel_2 = new JLabel("\uC774\uB984");
		lblNewLabel_2.setFont(new Font("굴림", Font.BOLD, 20));
		lblNewLabel_2.setHorizontalAlignment(SwingConstants.CENTER);
		panel_info.add(lblNewLabel_2);
		
		lbl_name = new JLabel("New label");
		lbl_name.setHorizontalAlignment(SwingConstants.CENTER);
		panel_info.add(lbl_name);
		
		JLabel label_1 = new JLabel("\uB098\uC774");
		label_1.setFont(new Font("굴림", Font.BOLD, 20));
		label_1.setHorizontalAlignment(SwingConstants.CENTER);
		panel_info.add(label_1);
		
		lbl_age = new JLabel("New label");
		lbl_age.setHorizontalAlignment(SwingConstants.CENTER);
		panel_info.add(lbl_age);
		
		JLabel lblNewLabel = new JLabel("\uBC88\uD638");
		lblNewLabel.setFont(new Font("굴림", Font.BOLD, 20));
		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
		panel_info.add(lblNewLabel);
		
		lbl_number = new JLabel("New label");
		lbl_number.setHorizontalAlignment(SwingConstants.CENTER);
		panel_info.add(lbl_number);
		panel_1.add(contact_scroll);
		
        contact_list = new JList();
		contact_scroll.setViewportView(contact_list);
	}
}

다음 연락처 추가 버튼을 누르면 생성되는 폼형태를 만들기 위해서

ContactAddView 생성

 

JDialog 의 기본 폼

 

폼을 만들고

ContactView 파일로 돌아와서 연락처 추가 버튼에 addView 다이로그 추가해주면

딩동 뜨는걸 확인할수있음

이제 db와의 연동과정을 진행해야한다.

sql문 만들어서 같은 디렉토리에 저장

DB의 정보를 자바에서 처리(저장)할수있는 자료형으로 만들어주기 위해  VO클래스를 하나 만들어준다.

 

다음 직접 자바에서 db에 접근 연동할수있는 DAO 클래스를 만들어준다.

 

중간에 항상 OJBC.JAR 파일 BUILD PATH 설정해줘야한다. [ADD EXTERNAL JAR]눌러서 항상 등록

단축키는 alt+enter

 

중간정리

전화목록 프로그램 구현중...

ContactView 파일

 

ContactAdd 파일

ContactDAO,ContactVO,contact.sql 까지 설정완료된 상태...

등록한 정보를 리스트필드에 올리는 형태를 구현해야함

 

 

VO클래스

package guicontact;

public class ContactVO {  //전역변수설정-생성자-게터세터-출력메서드(toString) 순서
	private String name;  //DB정보를 자바한테 String 형태로 읽을수있도록 변환하는 클래스
	private int age;
	private String phone;
	
	public ContactVO(String name, int age, String phone) {
		
		this.name = name;
		this.age = age;
		this.phone = phone;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	
	public String toString() {
		return "ContactVO: ["+name+","+age+","+phone+"]";
	}
	
	

}

 

 

DAO클래스

package guicontact;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ContactDAO {//변수선언-db 연동종료기능-기능메서드구현
	private Connection conn;
	private PreparedStatement pst;
	private ResultSet rs;

	public void connection() { //db연결기능--프로젝트 공통코드
		try { //고정적으로 계속 쓰이는것 복사코드
			String ur1="jdbc:oracle:thin:@localhost:1521:xe"; //localhost부분을 아이피주소로 바꾸면 팀원모두 db서버에 접근 가능
			String user="hr";
			String password="hr";
			
			//1. JDBC 드라이버 로딩(동적로딩)
			Class.forName("oracle.jdbc.driver.OracleDriver");//이 구문을 실행했을때 해당 파일이 있는지 없는지 확인.복사쓰기 외울필요x
			//2. DB 연결
			conn=DriverManager.getConnection(ur1 , user, password);// 아까 db 커넥션의 propertise 정보
			
			if(conn==null) {
				System.out.println("db연결 실패");
			}else {
				System.out.println("db연결 성공");
			}
			//3. DB에 보낼 Query문 작성
			//PreparedStatement:자바프로그램과 sql사이에 데이터를 전송할수있는 통로를 만들어주는 역할
			//인터페이스 클래스임으로 객체를 생성할수없음
		} catch (ClassNotFoundException e) {
			e.printStackTrace(); //오류메시지 출력
		} catch (SQLException e) {
			e.printStackTrace();
		} 
		
	}
	
	//db종료하는 기능    - --프로젝트 공통사항코드
	public void close() {
	    try {
	    	if(rs !=null) { rs.close();}
			if(pst != null) {pst.close();}
			if(conn !=null) {conn.close();}
		}catch (SQLException e) {
			e.printStackTrace();
		}	
	}
	
	//기능정의:연락처추가,삭제,전체연락처보기
	
	//순서:db연결-sql작성문 및 넘겨주기prapared-sql문이 틀릴수도있기에 예외처리문-pst로 값채워넣기(Vo저장값을 get으로 전달)
	//-sql문 실행-finally 이용한 db종료
	public void addContact(ContactVO vo) {//연락처추가
		
		connection(); //db연결
	
		try {//sql문이 오류가 날수있기 때문에 
			String sql="insert into contact values(?,?,?)";
			pst=conn.prepareStatement(sql);
			pst.setString(1,vo.getName());
			pst.setInt(2,vo.getAge());
			pst.setString(3,vo.getPhone());
			
			pst.executeLargeUpdate();//sql문 실행
			
		} catch (Exception e) {
			
		} finally{//예외처리 상관없이 무조건 종료
			close();
		}
	}
	
	
	
	
}
728x90
반응형
LIST