DB 에데이터저장을위한입력창설계 - JLabel, JTextField, JButton 을이용한입력창설계 - 2 -

Similar documents
JTable과 MVC(Model-View-Controller) 구조 - 모델-뷰-컨트롤러구조는데이터의저장과접근에대한제공은모델이담당하고, 화면표시는뷰, 이벤트의처리는컨트롤러가하도록각역할을구분한구조이다. 즉, 역할의분담을통하여상호간의영향을최소화하고각요소의독립성을보장하여독자

제8장 자바 GUI 프로그래밍 II

gnu-lee-oop-kor-lec10-1-chap10

PowerPoint Presentation

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 04-UDP Programming.ppt

9장.key

자바GUI실전프로그래밍2_장대원.PDF

<4D F736F F F696E74202D20C1A63230C0E520BDBAC0AE20C4C4C6F7B3CDC6AE203128B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

11장.key

Microsoft PowerPoint - Java7.pptx

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PowerPoint Template

JAVA PROGRAMMING 실습 08.다형성

PowerPoint 프레젠테이션

- 다음은 Statement 객체를사용해서삽입 (insert) 작업의예 String sql = "insert into member(code, name, id, pwd, age) values ("; int id = 10; sql = sql + id +, ;// 항목사이에

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

오버라이딩 (Overriding)

Microsoft PowerPoint - 14주차 강의자료

PowerPoint Presentation

PowerPoint Presentation

Java Programing Environment

No Slide Title

슬라이드 1

PowerPoint Presentation

No Slide Title

중간고사

쉽게 풀어쓴 C 프로그래밊

제11장 프로세스와 쓰레드

강의자료

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

10 이벤트 처리와 그래픽 프로그래밍.key

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

제8장 자바 GUI 프로그래밍 II

PowerPoint 프레젠테이션

Microsoft PowerPoint - 2강

Microsoft PowerPoint - 06-Chapter09-Event.ppt

슬라이드 1

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

JAVA PROGRAMMING 실습 09. 예외처리

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

JUNIT 실습및발표

public class FlowLayoutPractice extends JFrame { public FlowLayoutPractice() { super("flowlayout Practice"); this. Container contentpane = getcontentp

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - EEL2 Lecture10 -Swing and Event Handling.pptx

10장.key

모든스윙컴포넌트에는텍스트옆에이미지를추가로표시할수있다. ImageIcon image = new ImageIcon("image.gif"); JLabel label = new JLabel(" 이미지레이블 "); label.seticon(image);

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

Microsoft PowerPoint - [JAVA프로그래밍]9장GUI

Design Issues

C++ Programming

PowerPoint Presentation

PowerPoint Presentation

gnu-lee-oop-kor-lec06-3-chap7

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

슬라이드 1

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

PowerPoint Presentation

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 05. 객체의 활용

어댑터뷰

(Microsoft PowerPoint - LZVNQBAJWGTC.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint 프레젠테이션

슬라이드 1

Microsoft Word - java18-1-final-answer.doc

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 02. 표준 입출력

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

Cluster management software

[ 프로젝트이름 ] : Project_Car [ 프로젝트를만든목적 ] : 임의의자동차판매소가있다고가정하고, 고객이원하는자동차의각부분을 Java 를이용하여객 체로생성하고, 그것을제어하는메소드를이용하여자동차객체를생성하는것이목표이다. [ 프로젝트패키지와클래스의내용설명 ] [

쉽게 풀어쓴 C 프로그래밍

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

PowerPoint 프레젠테이션

Spring Data JPA Many To Many 양방향 관계 예제

PowerPoint 프레젠테이션

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

PowerPoint 프레젠테이션

Microsoft PowerPoint - CSharp-10-예외처리

Visual Basic 기본컨트롤

PowerPoint 프레젠테이션

Microsoft PowerPoint - ÀÚ¹Ù08Àå-2.ppt

PowerPoint 프레젠테이션

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint 프레젠테이션

Microsoft PowerPoint - java1-lecture11.ppt [호환 모드]

슬라이드 1

Transcription:

Swing 을이용한 DB 작업 Swing Swing은 AWT와함께 Java2에추가된 GUI 처리패키지이다. AWT는해당컴퓨터의 OS가가지고있는컴포넌트를이용하기때문에사용컴퓨터에종속적인 GUI를제공한다. 그러므로, OS의종류에따라화면에출력되는 GUI가다르게된다. 반면에 Swing은 JVM이직접 Swing 패키지를사용해서구현하기때문에 OS가서로달라도동일한화면을제공하는장점을가지고있다. 또한, 데이터베이스의검색결과를쉽게이용할수있는 JTable객체를제공하고있다. Swing은 AWT의확장이므로기존의 AWT 컴포넌트이름앞에 J자만추가하면 Swing의컴포넌트가되므로쉽게학습할수있다. Swing을사용하려면 javax.swing 패키지를포함해야한다. - JFrame AWT에서는 Frame과동일한기능을갖는다. JDK 1.4까지는 JFrame에컴포넌트를붙이기위해서는 contentpane 객체를 getcontentpane() 메소드를사용해서얻어와야했다. 하지만, JDK 1.5 이후부터는 AWT와같이 add() 메소드를사용해서컴포넌트들을직접프레임에붙일수있다. AWT에서는윈도우를종료시키기위해서윈도우종료이벤트처리를해야했다. 하지만, Swing에서는기본적으로윈도우종료이벤트처리는간단한메소드를사용해서처리하고있다. setdefaultcloseoperation(jframe.exit_on_close); setdefaultcloseoperation 메소드에사용할수있는인자값은다음표와같다. 상수이름 의미 DISPOSE_ON_CLOSE 윈도우의종료버튼을눌렀을때모든자원을반납한다. DO_NOTHING_ON_CLOSE 윈도우의종료버튼을눌렀을때아무일도하지않는다. EXIT_ON_CLOSE 윈도우의종료버튼을눌렀을때강제로종료한다. HIDE_ON_CLOSE 윈도우의종료버튼을눌렀을때윈도우를숨긴다. Swing 에서윈도우종료처리한예제 import javax.swing.jframe; public class FrameExam extends JFrame { public FrameExam() { setdefaultcloseoperation(exit_on_close);// 윈도우종료이벤트처리 setsize(300, 700); setvisible(true); public static void main(string[] args) { FrameExam f = new FrameExam(); - 1 -

DB 에데이터저장을위한입력창설계 - JLabel, JTextField, JButton 을이용한입력창설계 - 2 -

위의화면을설계하기위해사용한클래스는모두세개 1 모든컴포넌트를가지고있는패널을생성하는클래스 2 위에서생성한패널을프레임에붙이는클래스 3 main() 메소드를가지고있는클래스. 위에서만든프레임을생성한다. 1번클래스는다음과같습니다. import java.awt.gridlayout; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.jtextfield; public class InputDataFrame extends JPanel { JTextField txtname, txtid, txtpwd, txtage; JButton btnadd, btncancel; public InputDataFrame() { setlayout(new GridLayout(7, 1));//7행 1열로화면을나누는그리드레이아웃설정 add(new JLabel(""));// 공백출력을위한레이블 JPanel panelname = new JPanel();// 이름입력에사용되는패널생성 panelname.add(new JLabel(" 이름 ", JLabel.RIGHT)); //" 이름 " 을오른쪽정렬해서출력하고패널에붙임 panelname.add(txtname = new JTextField(20)); //20크기의문자입력텍스트필드를생성해서패널에붙임 add(panelname);// 이름입력패널을프레임에붙임 JPanel panelid = new JPanel();// 아이디입력에사용되는패널생성 panelid.add(new JLabel(" 아이디 ", JLabel.RIGHT)); panelid.add(txtid = new JTextField(20)); add(panelid);// 아이디입력패널을프레임에붙임 JPanel panelpwd = new JPanel();// 암호입력에사용되는패널생성 panelpwd.add(new JLabel(" 암호 ", JLabel.RIGHT)); panelpwd.add(txtpwd = new JTextField(20)); add(panelpwd);// 암호입력패널을프레임에붙임 JPanel panelage = new JPanel();// 나이입력에사용되는패널생성 panelage.add(new JLabel(" 나이 ", JLabel.RIGHT)); panelage.add(txtage = new JTextField(20)); add(panelage);// 나이입력패널을프레임에붙임 - 3 -

JPanel panelbutton = new JPanel();// 버튼 2개를위한패널생성 panelbutton.add(btnadd = new JButton(" 가입하기 "));// 가입하기버튼생성후패널에붙임 panelbutton.add(btncancel = new JButton(" 취소하기 "));// 취소하기버튼생성후패널에붙임 add(panelbutton);// 버튼이 2개달린패널을프레임에붙임 2 번클래스는다음과같습니다. import java.awt.borderlayout; import javax.swing.jframe; public class InputDataWindowCreation extends JFrame { InputDataFrame idf; public InputDataWindowCreation() { idf = new InputDataFrame();// 입력데이터창을생성한다. add(idf, BorderLayout.CENTER);// 입력데이터창의위치를가운데로설정 setdefaultcloseoperation(jframe.exit_on_close);// 윈도우종료이벤트처리 pack();// 빈틈을없애고프레임에붙임 setvisible(true);// 화면에출력 3번클래스는다음과같습니다. public class DataManagedBySwing { public static void main(string[] args) { InputDataWindowCreation f = new InputDataWindowCreation(); - 4 -

다이얼로그창 - 다양한형태로다이얼로그를생성할수있다. - 사용자에게특정한메시지를보여주는다이얼로그는 showmessagedialog() 메서드를사용한다. JOptionPane.showMessageDialog(this, " 가입이성공적으로완료되었습니다."); //this 의의미는다이얼로그가소속된객체를의미한다. //null 이면자동으로현재의프레임이사용된다. - 사용자로부터데이터를입력받기위해서는 showinputdialog() 메서드를사용한다. JOptionPane.showInputDialog(this, " 아이디를입력하세요."); - 확인을위한다이얼로그는 showconfirmdialog() 메서드를사용한다. JOptionPane.showConfirmDialog(this, " 작업을종료하시겠습니까?"); - 5 -

- 위의세가지기능을모두가지는대화상자는 showoptiondialog() 메소드를사용해서만들수있다. String[] str = {" 가입하기 ", " 다시쓰기 ", " 취소 "; JOptionPane.showOptionDialog(this, " 원하는작업을선택하세요.", " 대화상자 ", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, str, str[0]); // 첫번째매개변수의의미는다이얼로그가속한객체 // 두번째매개변수의이름은다이얼로그에출력될문자열 // 세번째매개변수는다이얼로그윈도우의제목으로사용될문자열 // 네번째매개변수는다이얼로그에출력되는버튼의종류 // 다섯번째매개변수는다이얼로그에출력되는메세지의종류. 메세지의종류는다음과같다. // ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, // QUESTION_MESSAGE, or PLAIN_MESSAGE // 여섯번째매개변수는다이얼로그에출력될아이콘그림 // 그림이있는경우에는 null자리에 new ImageIcon("myImage.gif") 를사용하여출력될그림을지정한다. // 일곱번째매개변수는다이얼로그에출력되는버튼의제목이들어있는배열이름 // 여덟번째매개변수는기본적으로선택되어있는버튼의제목 라디오버튼, 체크박스와아이템이벤트 - 스윙에서는라디오버튼을위해서 JRadioButton 클래스가제공된다. 라디오버튼은유일한선택을위해서사용된다. 즉, 복수개의선택이가능하지않다. 라디오버튼은버튼의그룹을만든후그룹에라디오버튼을포함시킨다. ButtonGroup group1 = new ButtonGroup();// 내국인, 외국인중하나선택을위한그룹생성 JRadioButton btn1 = new JRadioButton(" 내국인 ", true);// 라디오버튼생성 JRadioButton btn2 = new JRadioButton(" 외국인 ", false); group1.add(btn1); group1.add(btn2);// 생성한라디오버튼을그룹에포함시킨다. ButtonGroup group2 = new ButtonGroup();// 회원의등급선택을위한그룹생성 JRadioButton btn3 = new JRadionButton(" 일반회원 ", true); JRadioButton btn4 = new JRadionButton(" 우수회원 ", false); group2.add(btn3); group2.add(btn4); - 6 -

- 체크박스는복수개의선택이가능한버튼이다. JCheckBox ch1 = new JCheckBox(" 등산 ", true);//true 는선택상태를뜻한다. JCheckBox ch2 = new JCheckBox(" 독서 ", true); JCheckBox ch3 = new JCheckBox(" 게임 ", false);//false 는선택해제상태를뜻한다. - 위에서살펴본라디오버튼이나체트박스를선택하면 ItemEvent가발생한다. 따라서, ItemListener를사용해서이벤트처리를할수있다. - ItemListener는콜백메소드로 public void itemstatechanged(itemevent e) { 를가지고있다. 이메소드를오버라이딩해서원하는기능을처리하도록한다. - 이벤트를발생시키는이벤트소스는여러개이지만이벤트처리메소드는하나이므로, 어떤이벤트소스에서발생한이벤트인지를조사해야한다. public void itemstatechanged(itemevent e) { Object obj = e.getsource();// 이벤트를발생시킨컴포넌트가무엇인지를가지고온다. if(obj == btn1) { //btn1에서이벤트가발생한경우에대한처리를한다. else if(obj == btn2) { //btn2에서이벤트가발생한경우에대한처리를한다. 콤보박스와리스트박스 - 콤보박스는여러개의항목중에서하나를선택할수있도록구성된컴포넌트이다. JComboBox 클래스를사용하며 ItemListener 를사용해서이벤트를처리한다. String str[] = {" 이름 ", " 아이디 ", " 성별 ", " 전화번호 "; JComboBox combo = new JComboBox(str); combo.additemlistener(this); public void itemstatechangedlistener(itemevent e) { if(e.getstatechanged() == ItemEvent.SELECTED) {// 특정항목을선택했는지판단한다. System.out.println(e.getItem() + " 이선택되었습니다."); - 콤보박스는항목을선택하기위해서오른쪽의역삼각형버튼을클릭해야목록이나타난다. 리스트는목록이 펼쳐져있어서여러항목이화면에나타난다. - 7 -

- 리스트박스의이벤트처리는 ItemListener 와 ListSelectionListener 에서할수있다. ListSelectionListener 에는 valuechanged() 콜백메소드에서이벤트를처리한다. String[] str = {" 등산 ", " 게임 ", " 독서 ", " 수영 ", " 영화 ", " 운동 "; JList list = new JList(str); list.addlistselectionlistener(this); public void valuechanged(listselectionevent e) { Object[] item;// 리스트는다중선택이가능하므로선택한항목을저장하기위해서는배열을사용 JList list = (JList)e.getSource();// 이벤트를발생한컴포넌트를가지고온다. item = list.getselectedvalues();// 다중선택한항목들을배열에저장한다. for(int i = 0; i < item.length; i++) { System.out.println(" 선택한항목 = " + item); 테이블과 MVC - 다중의데이터를출력하기위해서테이블구조의 JTable 클래스를사용한다. - JTable 를생성하는순서는다음과같다. 1 테이블의각셀에들어갈내용을저장한이차원배열을선언한다. Object[][] data = {... ; 2 제목으로출력할문자열을가지고있는일차원배열을선언한다. String[] columnname = {... ; 3 JTable 객체를생성한다. 테이블에출력할데이터와각열의제목으로객체를생성한다. JTable table = new JTable(data, columnname); 4 윈도우프레임에테이블을붙인다. add(new JScrollPane(table)); - 8 -

- 테이블사용예제 public class TableExam extends JFrame { Object[][] data = { {" 홍길동 ", "hong@mail.com", "1221", 15, {" 박길동 ", "park@mail.com", "1245", 30, {" 최길동 ", "choi@mail.com", "2332", 20 ;// 테이블에출력할데이터 String[] columnname = {" 이름 ", " 이메일주소 ", " 암호 ", " 나이 ";// 열의제목으로사용될문자열 JTable table; public TableExam() { table = new JTable(data, columnname); add(new JScrollPane(table)); setdefaultcloseoperation(jframe.exit_on_close); setsize(500, 200); setvisible(true); public static void main(string[] args) { new TableExam(); MVC(Model-View-Controller) 구조 - 모델-뷰-컨트롤러구조는데이터의저장과접근에대한제공은모델이담당하고, 화면표시는뷰, 이벤트의처리는컨트롤러가하도록각역할을구분한구조이다. - 이구조를사용하면한개의데이터모델을사용해서다양한형태의뷰를사용해서보여줄수있다. - JTable 은이구조로구성된클래스로테이블에출력되는데이터는가지고있지않으며단지데이터를보여주는역할을한다. - JTable은내부적으로 DefaultTableModel 객체를사용해서테이블에출력할모델로사용한다. - 모델객체를사용해서테이블을작성하는절차는다음과같다. 1 모델클래스설계 public class 클래스이름 extends AbstractTableModel { 2 모델객체생성클래스이름 model = new 클래스이름 (); 3 모델을사용해서 JTable 객체생성 JTable table = new JTable(model); 4 윈도우프레임에테이블을붙인다. add(new JScrollPane(table)); - 9 -

AbstractTableModel - AbstractTableModel 클래스를상속해서모델객체를생성하며, 다음의메소드들을오버라이딩해야한다. int getcolumncount() // 출력할데이터의열의갯수를알려주는메소드 int getrowcount() // 출력할데이터의행의갯수를알려주는메소드 Object getvalueat(int row, int column) // 테이블에서해당열, 행을선택했을때그곳에저장된데이터를알려주는메소드 - 다음의데이터를테이블에출력할경우오버라이딩해야할메소드의내용은다음과같다. String[] columnname = {" 이름 ", " 이메일주소 ", " 암호 ", " 나이 ";// 열의제목으로사용될문자열 Object[][] data = { {" 홍길동 ", "hong@mail.com", "1221", 15, {" 박길동 ", "park@mail.com", "1245", 30, {" 최길동 ", "choi@mail.com", "2332", 20 ;// 테이블에출력할데이터 1 getrowcount() 메소드를다음과같이오버라이딩한다. public int getrowcount() { return data.length;//3개의행으로구성되어있으므로 3을리턴한다. 2 getcolumncount() 메소드를다음과같이오버라이딩한다. public int getcolumncount() { return data[0].length;//4개열로구성되어있으므로 4를리턴한다. 3 getvalueat() 메소드를다음과같이오버라이딩한다. public Object getvalueat(int rowindex, int columnindex) { return data[rowindex][columnindex];// 해당위치의데이터를리턴한다. 4 getcolumnname() 메소드를다음과같이오버라이딩한다. - 만약이메소드를오버라이딩하지않으면, 테이블의제목들이 A, B, C, D로출력된다. 따라서, 정확한열의이름을출력하고저한다면이메소드를오버라이딩한다. public String getcolumnname(int column) { return columnname[column]; - 10 -

모델객체를사용한테이블만들기예제 - 이예제는모두 2 개의클래스로구성되어있다. 1 모델객체클래스 2 윈도우프레임을만드는클래스. 이클래스에서모델객체클래스를생성한다. 3 main() 메소드를가지고있는클래스. 이클래스에서윈도우프레임을만드는클래스를생성한다. 1 모델객체클래스는다음과같다. public class MemberModel extends AbstractTableModel { //1. 테이블의각셀에들어갈내용을이차원배열에넣는다. Object [][] data = { {" 강지아 ", "jeea@mem.com", "1111", 20, {" 이장미 ", "rose@mem.com", "2222", 30, {" 김백합 ", "lily@mem.com", "3333", 25, ; //2. 테이블의열이름이들어갈내용을일차원배열에넣는다. String [] columnname = { " 이름 "," 아이디 "," 패스워드 ", " 나이 "; public int getcolumncount() { return data[0].length; // 열의갯수를알려주는메소드로오버라이딩을했다. public int getrowcount() { return data.length; // 행의갯수를알려주는메소드로오버라이딩을했다. public Object getvalueat(int rowindex, int columnindex) { return data[rowindex][columnindex]; // 지정된행과열에저장된데이터를알려주는메소드로오버라이딩을했다. public String getcolumnname(int column) { return columnname[column]; // 열의제목을알려주는메소드로오버라이딩을했다. - 11 -

2 윈도우프레임을만드는클래스 public class FrameExam extends JFrame{ MemberModel model; JTable table; public FrameExam(){ model=new MemberModel(); table = new JTable(model); add(new JScrollPane(table)); setdefaultcloseoperation(jframe.exit_on_close); setsize(500, 200); setvisible(true); 3 main() 메소드를가지고있는클래스 public class MVCTest { public static void main(string[] args) { new FrameExam(); - 12 -

DB 에서검색된결과를모델객체에저장하는방법 - DB 에서검색된결과는 ResultSet 객체에저장되어있으므로, 이객체를모델객체로전달하여검색결과를배열에 저장하도록한다. public class MyModel extends AbstractTableModel { Object [][]data;// 검색결과를저장할배열. 어떤형태의데이터인지알수없으므로 Object 형태로선언 String []columnname;// 데이터가저장된테이블의열의제목을저장할배열 int rows, cols;// 검색된행의갯수를저장할변수 public int getcolumncount() { return columnname.length; // 검색된데이터의열의갯수를리턴하는메소드. 오버라이딩함. public int getrowcount() { return data.length; // 검색된데이터의행의갯수를리턴하는메소드. 오버라이딩함. public Object getvalueat(int rowindex, int columnindex) { return data[rowindex][columnindex]; // 지정된행과열에저장된데이터를리턴하는메소드. 오버라이딩함. public void getrowcount(resultset rsscroll){ try{ rsscroll.last(); rows=rsscroll.getrow(); catch(exception e){ e.printstacktrace(); // 검색된데이터의행의갯수를 ResultSet으로부터파악한후리턴하는메소드. 오버로딩함. //ResultSet으로부터데이터를추출해서 2차원배열에저장하는메소드. 새로작성함. public void setdata(resultset rs){ try{ ResultSetMetaData rsmd; rsmd=rs.getmetadata(); cols=rsmd.getcolumncount(); columnname=new String[cols]; for(int i=0; i<cols; i++) columnname[i]=rsmd.getcolumnname(i+1); data=new Object[rows][cols]; int r=0; - 13 -

while(rs.next()){ for(int c=0; c<cols; c++) { data[r][c]=rs.getobject(c+1); // data[r][c]=util.tounicode((string) rs.getobject(c+1)); // 둘중의하나만사용할것. Util.toUnicode() 는한글이깨질경우에한다. r++; rs.close(); catch(exception e){ e.printstacktrace(); 사용하는방법 JTable table; String selectall = "select * from employees"; PreparedStatement pstmtall, pstmtallscroll; 어쩌구저쩌구 Connection con = DriverManager.getConnection(url, id, pwd); pstmtall = con.preparestatement(selectall); pstmtallscroll = con.preparestatement(selectall, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); // 검색결과를가지고있는 ResultSet에는 previous(), first(), last() 메소드들이있으며, 이들메소드를사용해서 // 검색결과의위치를이동할수있다. 그러나, 일반적인 ResultSet에서는 next() 메소드외에는동작하지않는다. // 검색결과의위치를이동시키려면 ResultSet을생성할때사용하는 PreparedStatement 객체에서이동가능한 //ResultSet을생성하라고조작을해야한다. 위의 pstmtallscroll에서이와같은작업을한것이다. 어쩌구저쩌구 ResultSet rs = pstmtall.executequery(); ResultSet rsscroll = pstmtscroll.executequery(); Model model = new Model(); model.setdata(rs); model.getrowcount(rsscroll); table.setmodel(model);// 테이블이사용할데이터모델설정 table.updateui();// 테이블갱신 - 14 -