국비지원학원/Java

40일차

초코맛 2018. 12. 19. 00:48
반응형
*메모장
  • 기능추가

 

*Dialog
  • 정보를 제공하는 작은 Window    
  • 부모 윈도우가 존재해야하는 Component  (FileDialog도 마찬가지)
  • IDE(통합개발환경) : 컴파일,디버깅,소스,배포   <EditPlus는 IDE가 아님.
  • <혼자 동작하는 다이얼로그는 없닷
  • WindowComponent : 사용자에게 보여주는 일(Android에서는 Activity)=Frame?
  • :사용자에게 보여주는 일.
  • <Frame엔 BorderLayout이라는 자동처리 Layout이 들어있다?
  • 기본 Layout : BorderLayout (반드시 부모 존재)
  • 생성)  -  반드시 부모생성자가 존재해야 한다.(인자값이 꼬옥 들어감으로)
    • <Dialog는 기본생성자가 없어 부모가 필요한것, 기본생성자가 있으면 없어도 만들어진다?  반드시 매개변수가 필요..
  • 1.
    • //has a로 사용한것.
    • Dialog d=new Dialog(부모(프레임),타이틀,modal);
    •                                                                            True-modal :자식창이 동작했을때 부모창이 선택되지 않는것.
    •                                                                            false-비modal : 자식창이 동작했을때 부모창이 선택되면 비모달. (ex, EditPlus의 30일 기간창)
  • 2.Component 배치
    • Button b = new Button("버튼");
    • //인스턴스 대상이 붙는다는게 다르다.
    • //만약 프레임을 상속받지않고 사용했다면 이렇게 사용했어야한다. 상속받으니 사용하고자하는 대상객체가 없어도 되는것
    • //has a로 사용한것?
    • d.add(b);
    • d.add("Center",b);
  • 3.크기 설정
    • d.setSize(w,h);
    • d.setBounds(x,y,w,h);
  • 4.가시화
    • d.setVisible(true);

       

       

  • 1. 어제는 is a 로 사용한것 
  • Dialog 상속
    • public class Test extends Dialog {
  • 2.생성자 정의 (super로 부모클래스를 불러와야 하는데, 기본생성자가 들어가면 Error나?? 인자값이 항상 존재하기 때문
    • public Test(Frame f){    //Frame f 를 넣어 ... Frame을 상속받은 JavaMemo를 넣어도 된다.
    • //    super(부모프레임이 들어가야 하는데 new JavaMemo() 이 들어간다면 누를때마다 메모장이 하나씩 더 띄우며 다이어로그가 뜬다.
    •       
    •       super(f/*Dialog와 Frame은 has a관계*/, "타이틀", 모달);
    •       //일반 Component를 생성
    •       //Component 를 Dialog에 배치
    •       //Dialog에 크기 설정
    •       //Dialog 가시화
    • }

 

*메모장에 Dialog 기능 추가
  • 글꼴)  =>Fromat   /   FormatEvt 부분
  • list를 클릭하면 아이템의 값이 해당list위의 T.F에 설정되면서 보기가 변경되어야 한다.
  • 확인버튼이 클릭되면 선정한 Font정보가 부모창의 T.A에 반영되어야 한다.
  • 취소버튼이 클릭되면 창이 닫혀야 한다.
  • Action,Item Adapter
*Swing
  • AWT 와 비교해 이쁘다
  • <awt와 같아 알면 쓸수있다.
  • <가벼운 컴퍼넌트=>빠르다
  • AWT 후속 Window Design 개정되어나왔다. 
    • 개선) (AWT 단점) 느리다(무겁다), OS마다 다른 디자인을 제공, 이미지를 다루기 어렵다.
    • =>빠르고 , OS마다 같은 디자인을 제공, 이미지 아이콘으로 편리하게 만들게 제공함.
  • javax.swing 패키지에서 Component 제공.
  • javax=>Java에서 제공하는 기능을 확장,개선 했을때 여기로 들어간다. (기능개선 패키지)자바확장 패키지
  • 장점) 빠르다, OS마다 같은 디자인을 제공,이미지기능이 대폭개선 추가
  • AWT와 구분되는 이름을 가진다.
  • MVC pattern이 적용된 component가 제공된다.  (JTable,JList,,,=javax.swing.table.DefaultTableModel)
    • MVC(Model View Controler) : 디자인,업무처리, 데이터 처리를 구분하여 만드는 개발 pattern
    •                                                             =>Business logic  : 복잡도가 떨어져서 유지보수성이 좋아진다.
    • Model: 데이터를 처리하는 로직을 가지는 클래스
    • 뷰 : 화면 디자인
    • 컨트롤러 : 이벤트 처리 (통제)
  • <MVC가 웹에 들어가면 모델2 첫날 그린 전체 그림이  이것의 확장판?
  • 유지보수성이 좋아진다....단점은 파일이 많아짐 (업무하나당 파일이 3개이상,,,파일관리가 어렵다.)
    • s/w=>결함 발생시,유지보수, 이 유지보수를 해주지 않을때 (개발비용이 유지보수 비용보다 싸다면 더이상 할 필요가 없다)sw의 성능이, 수명이 다한것.
    • h/w=>동작을 안하면 끝
  • 파일관리가 어렵다.(많아져서) 값넘기기가 어렵다. 에러처리가 어렵다.
  • AWT의 이벤트를 같이 사용하게 된다.
  • 부모가 같아서 AWT의 컴포넌트를 Swing에서 같이 사용할수 있다.
  • 작성법)
    • 1.Window Component상속
      • public class Test extends JFrame{//x누르면 알아서 꺼짐. dispose()안 써도 된다. (인스턴스는 살아있다!?)
      • //윈도우 컴퍼넌트이고, 보더레이아웃이 기본
    • 2.이벤트 처리와 관련이 있는 Component 선언
      • JButton btn;
      • public Test(){
      • super("타이틀 바에 들어갈 내용");
      • //컴포넌트 생성
      • btn= new JButton("Label"); //아이콘도 들어가는데, 이때의 아이콘=이미지?
      • //배치
      • add("Center",btn);
      • //종료
      • setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//윈도우 죽일때
      • }
<<<숙제>>>
도움말Dialog 만들기 

 


package kr.co.sist.memo.view;
import java.awt.Button;
import java.awt.Dialog;
import java.awt.TextArea;
import kr.co.sist.memo.evt.HelpEvt;
@SuppressWarnings("serial")
public class Help extends Dialog{
     private JavaMemo jm;
     private Button btnOk;
     
     public Help(JavaMemo jm) {
           super(jm,"도움말",true);
           this.jm=jm;
           
           TextArea taInfo=new TextArea("메모장 정보\n이 메모장은  Java로 만들었으며\n"
                     + "누구나 코드 수정 및 배포를 할 수  있습니다.\n단, 이 코드를 사용하여 개선했을 때에는\n"
                     + "소스공개를 원칙으로 한다.\n작성자 :  박은영\nversion :1.0");
           btnOk =new Button("확인");
           taInfo.setEditable(false);
           
           setLayout(null);
           
           taInfo.setBounds(20, 40, 360, 250);
           btnOk.setBounds(175,305,50,25);
           add(taInfo);
           add(btnOk);
           
           //이벤트 등록
           HelpEvt hwe =new HelpEvt(this);
           btnOk.addActionListener(hwe);
           addWindowListener(hwe);
           
           setBounds(jm.getX()+150,jm.getY()+80,400,350);
           setVisible(true);
     
     }//Work28
     public JavaMemo getJm() {
           return jm;
     }
     public Button getBtnOk() {
           return btnOk;
     }
     
}//class
package kr.co.sist.memo.evt;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import kr.co.sist.memo.view.Help;

public class HelpEvt extends WindowAdapter implements ActionListener{

    private Help hw;
    
    public HelpEvt(Help hw) {
        this.hw=hw;
    }//Work28Evt
    
    @Override
    public void actionPerformed(ActionEvent ae) {
        if(ae.getSource()==hw.getBtnOk()) {
            hw.dispose();
        }//end if
    }//actionPerformed
    
    @Override
    public void windowClosing(WindowEvent e) {
        hw.dispose();
    }//windowClosing

}//class


 

반응형

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

42일차  (0) 2018.12.20
41일차  (0) 2018.12.20
39일차  (0) 2018.12.19
38일차  (0) 2018.12.18
37일차  (0) 2018.12.18