반응형
*메모장
-
기능추가
*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
반응형