반응형
-
*JTable
-
MVC(Model View C컨트롤?(Model View Controler)패턴이 적용된 Component
-
사용법)
-
1.Default TableModel 생성)
-
DefaultTableModel dta=new DefaultTalbeModel(rowdata , columnName);
-
<테이블은 컬럼명과 Data로 이루어져 있을텐데 일차원배열의 컬럼의 이름을 받는 생성자,이차원배열의 컬럼의 데이터를 받는 생성자가 있을것이다.
-
<//튜플개수 =카디널리티(cardinality)
-
-컬럼의 이름을 설정한 배열 : String[] ColumnName={"컬럼명","","","",""};
-
-테이블에 들어갈 데이터를 설정한 배열 : String[][] rowData={{값,,,},{,,,},,,};
-
<데이터는 모두 모델이라는 부분에서 데이터를 관리하게 된다.
-
2.JTable생성)
-
JTable jt= new JTalbe(dta);
-
3.ScrollBar를 설정)
-
<스크롤바가 자동으로 할당되지 않는데, 가지지않으면 데이터가 일정량을 넘어갔을때 볼수없다.
-
JScrollPane jsp=new JScrollPane(jt);
-
-설정하지 않으면 컬럼의 이름이 보이지 않는다!
package day1217;import javax.swing.JFrame;import javax.swing.JTable;import javax.swing.table.DefaultTableModel;/*** (JTable)* MVC Pattern이 적용된 class* @author owner*/@SuppressWarnings("serial")public class UseJTable extends JFrame {public UseJTable() {super("JTable 연습");//1.데이터를 관리하는 Model 클래스를 생성String[] columnNames = {"번호","이름","주소","이메일"};String[][] rowData= {{"1","000","인천시","c@test.com"},{"2","111","서울시","t@test.com"},{"3","222","경기도","h@test.com"}};DefaultTableModel dtm = new DefaultTableModel(rowData, columnNames);//<얘로 데이터의 추가 삭제 다함.//<매개변수중 벡터는 동시 접근이 되지 않는ㄷ다ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏarrayList는 접근가능..//2.데이터를 보여주는 View 클래스 생성.JTable jt=new JTable(dtm);//<데이터는 모델이 관리하는 view가 된다.//배치add("Center",jt);setBounds(100,100,500,300);setVisible(true);//<window component의 필수~!~!가시화해주지 않으면 보여주지 않는다.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//UseJTablepublic static void main(String[] args) {new UseJTable();//<인스턴스화는 객체를 생성하기 위해서 한것 생성자라는게 호출되고 객체는 그럼 자기가 가지고 있는 인스턴스 변수를 Heap에 올리고 가장첫주소를 반환.}//main}//class<지금상태는 스크롤 바를 설정하지 않았는데, 하지 않으니 창의크기를 줄였을때 컬럼의 값이 다 보여지지않는다!+컬럼명도 보이지 않는다.<데이터를 이동이라도 할수있음 모르지만 아무이동이 안되 나머지는 볼수 없게 된다...=>스크롤설정~!*Tab(JTabbedPane 사용)-
한정적인 공간에서 여러창을 번갈아가며 보여줄 때 사용.
-
JTabbedPane 사용)
-
1.생성
-
JTabbedPane jtp=new JTabbedPane();
-
2.디자인을 가진 Contaner Component를 추가
-
<일반 버튼도 라벨도 가능은 하지만 굳이.. 넣지는 않고 복잡한 디자인을 가진 panel을 넣게 된다.
-
JPanel jp=new JPanel();
-
jtp.add(jp);
-
jtp.add(jp1);
-
jtp.add(jp2,"타이틀");//탭의 타이틀명을 넣어도 된다.
*Exception Handling-예외 처리-
프로그램 동작중에 발생할 수 있는 가벼운 Error가 발생했을 때, 그에 대한 대비코드를 만들어 두는 것.
-
<예외는 에러의 하위개념(복구가 가능하다) , 에러는 더이상진행이 안되버림(심각->죽음)
-
<java.lang.Throwable 이라는 클래스가 모든 예외,에러의 부모로 오브젝트 바로 아래 존재한다.
-
모든 Exception과 Error의 부모는 Throwable이다.
-
Error : 발생하면 프로그램이 더이상 동작을 할 수 없다.
-
Exception : 발생하면 프로그램은 계속하여 동작할 수 있다.
-
Compile Exception과 Runtime Exception 2가지로 구분된다.
-
Compile Exception : 개발자가 반드시 처리해야하는 예외
-
Runtime Exception : JVM이 자동으로 처리해 주는 예외
-
예외처리는 try~catch, throws, throw 로 처리한다.
Compile TimeRun Time (JVM) : Java.execup로 연산, memory저장=>메모리에서 발생하는 Exception:개발자가 예외가 발생하는 상황을 다 알고 처리해야 하기 때문에 어렵다.1.소스 코드 작성class test{}2.저장 (파일명=클래스명)3.Compile(실패또는 성공인데, 컴파일의 목적은? : byte code를 생성하기 위함..) Test.class=>이때나는 에러가 컴파일 에러(문법틀림)<(이클립스의 경우 목적을 잊어버리기 쉬움)=>Bytecode를 제대로 만들기위해 코드를 처리하는게 Compile Exception클래스 로더localNetworkex)class Test{public static void main(String[] args){int[] arr{1,2,3,4,5};tyr{arr[5]=10; //그런수가 없어서 Exception발생~!~!}catch(ArrayIndexOutOfBoundsException aioobe){//예외가 발생했을때 처리할 코드}}*예외처리 문법) try~catch~fanallytry{//예외 발생 예상 코드}catch(예외처리클래스명 객체명){ //부모클래스가 가장위에 올라오면 아래 catch에서 Error가 발생한다. 모두 잡아버려서~!//예외발생시 처리할 코드}catch (~~){//예외발생시 처리할 코드}finally{//예외가 있어도 없어도 반드시 실행되어야 할 코드}/////////exception은 다잡을수 있으나 식별이 되자않아 쓰지 않는다.ex)public void 출근(){try{수업~~~}catch(배아픈 예외){화장실}catch(중요한 전화){나가서 전화를 받는다}catch(ZZZ){답이 없음..졸고 한타임 쉬고간다.}finally{갈땐 지문찍기}*catch 안에서 예외 출력)-
에러 출력 스트림 사용 권장(의미적인것 반드시 Err로 쓰라는건 아니다.)
-
System.err.println("예외 발생시 제공할 내용들");
-
1.간단한 메세지만 출력할 때 (이유만 출력된다)
-
예외처리 객체명.getMessage(); //=>반환형 String그래야 이유 나올수 있으니까!//java.lang.Throwable에 존재.
-
2.예외 처리 객체명과 메세지 출력
-
예외처리 객체명
-
예외처리 객체명=>예외처리객체명.toString();
-
3.아아주 자세한 메세지 (예외와 관련있는 모든 클래스가 다 출력)//눈에 보이지 않는것까지 출력된다.
-
예외처리 객체명.printStackTrace(); //=>반환형 X,매우 자세하게 잘 나온다.
//일반사용자에게는 가장 제한적인 정보만 제공해야하기 때문에 1번까지도 필요하지 않다. 죄송합니다. 만 보여주면 된다......//운용?자는 다 봐야...처리하지 않으면 외부위험에 노출된다.(악의적인 목적의 사용자)때문에 try~ catch로 잡아야 하는것.package day1217;/*** JVM이 자동으로 예외를 처리해 주는 RuntimeException* @author owner*/public class UseRuntimeException {public static void main(String[] args) {try {int num1=Integer.parseInt(args[0]);int num2=Integer.parseInt(args[1]);int result =0;result = num1/num2;System.out.println(num1+"/"+num2+"="+result);}catch (ArrayIndexOutOfBoundsException aioobe) {// System.err.println("배열의 인덱스가 잘못되었습니다.");//err로 바꾸면 글씨가 빨간색으로 출력된다.System.err.println("ㅈㅅㅈㅅ... 잘못되었습니다.");//err로 바꾸면 글씨가 빨간색으로 출력된다.System.err.println("예외의 이유 : "+aioobe.getMessage());//1이 어쨌다는건지 알수 없다...System.err.println("예외처리 클래스명과 이유 : "+aioobe);aioobe.printStackTrace();//매우 자세한 예외}catch (NumberFormatException nfe) {System.err.println("입력값이 숫자 형태가 아닙니다.");System.err.println("예외의 이유 : "+nfe.getMessage());System.err.println("예외처리 클래스명과 이유 : "+nfe);nfe.printStackTrace();}catch (ArithmeticException ae) {System.err.println("0으로 나눌 수 없습니다.");ae.printStackTrace();}catch (Exception e) {System.err.println("개발자가 인지하지 못한 예외."); //모든예외를 잡는다..!e.printStackTrace();}//<왜 예외를 각각처리하게 만들었냐면 : 예외가 발생했을때마다 식별해서 다르게 처리하려고..finally {System.out.println("반드시 실행되어야 할 코드");}//총 에러는3개가 있는데,// java.lang.ArrayIndexOutOfBoundsException: 0 =>런타임에러 try catch 안해도 됨.// java.lang.NumberFormatException: For input string: "사" =>프린트스텍트레이스에 의해 자세히 나오는것.// java.lang.ArithmeticException: / by zero =>}//main}//class<<<<<<숙제>>>>>>아래의 기능을 가진 program 작성1-1 프로그램이 시작되면 아래와 같은 메뉴 제공.메뉴선택1.입력 2.출력 3.종료1. 입력1번을 넣고 입력을 누르면 JoptionPane.showInputDialog데이터 입력예) 이름,자바점수, Oracla점수 -
반응형