국비지원학원/Java

42일차

초코맛 2018. 12. 20. 02:03
반응형
  • *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);
         
         }//UseJTable
         
         public 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 Time
    Run Time (JVM) : Java.exe 
    cup로 연산, memory저장
    =>메모리에서 발생하는 Exception
    :개발자가 예외가 발생하는 상황을 다 알고 처리해야 하기 때문에 어렵다.
    1.소스 코드 작성
    class test{
    }
    2.저장 (파일명=클래스명)
    3.Compile(실패또는 성공인데, 컴파일의 목적은? : byte code를 생성하기 위함..) Test.class
    =>이때나는 에러가 컴파일 에러(문법틀림) 
    <(이클립스의 경우 목적을 잊어버리기 쉬움)
    =>Bytecode를 제대로 만들기위해 코드를 처리하는게  Compile Exception

    클래스 로더
    local
    Network

    ex)
    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~fanally
    try{
        //예외 발생 예상 코드
    }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점수

 

 

반응형

'국비지원학원 > Java' 카테고리의 다른 글

44~46일차  (0) 2019.01.14
43일차  (0) 2018.12.20
41일차  (0) 2018.12.20
40일차  (0) 2018.12.19
39일차  (0) 2018.12.19