[Swing 기초] Java Swing [Applet] 기초

2009. 6. 23. 17:35 - 에릭투스

Frame =
좌표 = 픽셀단위로 이야기함.
     해상도(픽셀단위로)

ex> 문서전체가 모두 로딩이되고 이 보는 화면만 잘라내서  보여줌.
 우리가 보는 화면을 스크롤로 이동해서 보는것임.

Frame이 기본이되는것.

창 자체가 Frame or Window라고 한다.
<우리가 보는것은 전체 프레임에 일부를 보는것이다.>

Frame은 근간으로만 버티고 있는 것이고.
그앞에 Pane을 쌓는것, (계층구조로 구성) : 요즘 그래픽 환경은 모두 이런 환경이다.
< Layer 구조방식>

<맨앞에>
Frame - Root Pane(사용안함) - Layered Pane - Content Pane(주 화면)  - Glass Pane(마우스좌표를 가져올때)

각 구조와 Pane에대한 이해가 필요함.

<java awt Component
 java. awt. Container
  java awt Window
   java. awt Frame

<java. awt 의 Root Class : Component>
* 모든것이 Component임.

Class Frame
 <javax. swing . JFrame>
JFrame 만드는 방법.
 1. jFrame 상속받는 방법
 2. JFrame의 객체를 만드는 방법.

<어제 실습한거 설명>
1. JFrame
2. Component . Button


--지금은 애플릿은 사용하지 않는다. ( 대신에 사용할것이 너무 많기때문에..)
-- Frame은 유일한 존재로, 하나만 만든다.
--panel :

  (4) 주요 클래스들
 
  <1> Component
     1) 설명 : "기능 덩어리"를 만들기 위해 설계된 클래스
     2) 종류 : API 문서 참조
 
  <2> Container
     1) 설명 : Component 를 담아서 보여주는 그릇
     2) 종류 : Frame, Dialog, Window (기본 Layout : BorderLayout)
             Panel, Applet (기본 Layout : FlowLayout)
 
  <3> LayoutManager interface (배치관리자)
     1) 설명 : Component 를 Container 배치할때, 배치에 대한
           일정한 틀정보를 가진 클래스들
     2) 종류 : BorderLayout, FlowLayout, GridLayout, CardLayout ...


<실습 1>

1. Frame = BorderLayout
 : 전체적인 틀.
  ex)
  1) 생성시
   : JFrame 상속받는법 or JFrame 객체 생성 방법.
 
  2) 추가시 :
   add(Component, BorderLayout.위치)
   ex) add(pa,BorderLayout.NORTH);

2. Panel = FlowLayout
 : 물흘러가듯이  추가하면 하나씩하나씩 옆으로 계속 붙는녀석.

Panel
Panel.add(Component comp)

------------------------------------------------------------------------------------------------------------
141 ~ 148번까지 숙제
------------------------------------------------------------------------------------------------------------

<이벤트 처리>

 (5) 이벤트 처리
 
 <1> 이벤트 : 프로그램과 관계가 있는 외부의 사건
 
 <2> 이벤트 발생의 예
    1) 사용자가 마우스 버튼 클릭
    2) 마우스 움직이는것
    3) 키보드 누르는 것 등등등 ...
 
 <3> 이벤트 처리 모델
    1) 자기 자신의 클래스가 처리하는 모델 (Self Event Model)
    2) 위임형 이벤트 모델 (Delegation Event Model)

 <4> 이벤트 클래스 상속도 : 교재 345P 부터 참조
 <5> 리스너 클래스

리스너를 생성해야함,
리스너 : 이벤트가 발생하는지 안하는지 계속 감시

리스너를 달아주는 방식이 여러가지가 있다.
1) ActionListener
 1. InterFace ActionListener 를 상속 받는 방법
  : actionPerformed(ActionEvent e) 메소드를 재정의 해야함.

 2. 리스너를 컴포넌트에 달아준다.
  : Component. addActionListener(ActionListener ) : this = 현재 자신이 ActionListener
  : Component마다 모두 ActionListener를 달아줘야한다,(이것이 규칙..ㅜㅜ)
  : 해당 Component에 리스너가가 호출될때 ActionPerformed Method가 호출된다.

<실습>
버튼1에 setText( " Text " );
  bt1.getText();

Swing을 많이 연습하면 Api문서를 자주 보게된다..ㅜㅜ

각각 Componet에 따라 다른 Event를 실행시키고 싶은 경우.
ActionEvent.getSource();
 : 이벤트 발생한 컴포넌트객체를 가져옴. (리턴값 : Object)

so
//저번에 내가 쓰레드 run을 구별하는것과 같은 개념으로 생각하면됨,.
If문으로 구별가능
Object obj = ActionEvent.getSource();
if(obj == Component)


다이어로그 ( x표시만 있고 떠다니는 창만들기)
: 어떤 컴포넌트에 종속적임. 그래서 부모 컴포넌트를 지정해줘야한다.
: 리턴값은 int
JOptionPane.showConfirmDialog(parentComponent, message)

int result =
JOptionPane.showConfirmDialog(this, "끝내시겠습니까?");

if(result == JOptionPane.OK_OPTION)
 system.exit(0);

-----------------------------------------------------------------------------------------------------
JOptionPane.showConfirmDialog(parentComponent, message)
리턴값은 int (Y: 0  ,N: 1 ,취소 : 2)
JOptionPane.OK_OPTION = 0;
------------------------------------------------------------------------------------------------------

JFrame
 (입력 + ________)
  (실행)
  (______________)(입력은 안되고 위에값 불러오게하기 위에Component.getTxt
 

---------------------------------------------------------------------------------------------------------
Hint
---------------------------------------------------------------------------------------------------------
 JFrame을 상속받는 방법을 사용해서
 JPanel (add. JLable+ add. JTextField)
 JButton
 JTextField <입력은 불가능하게 > 위에 TextField값을불러오는 값.

GridLayout. : 사용방법 : JFrame 상속받고 setLayout(new  )
GridLayout은 모두 똑같이 할수 있다.
----------------------------------------------------------------------------------------------------------
문제해결
----------------------------------------------------------------------------------------------------------
1) JFrame 생성.
 extends JFrame
 객체생성 : JFrame jf = new JFrame(title);
 Component 추가 : JFrmae.add( Component, BoderLayout.위치)
JFrame Option
 1) JFrame.pack();
  : 자동 크기조절.
 2) JFrame.setVisible(true);
  : 결과 보기
 3) JFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
  : x창 누르면 종료(Close)

2) Component 만들기
 ex) JButton , JTextfield , JPanel , JLable
  JButton : 버튼
  JTextfield : 1행 입력받는 것.
  JPanel : Flow Layout
  JLable : 레이블.(입력받지못하지만 나타내는 글자.)


3) Event 처리(ActionListener)
 1. Interface ActionListener (implements ActionListener)
  e.getSource(); : 실행된 Component 객체를 반환 (return Object)

 2. MethodActionPerformed(Action e) (Method Overriding)
  ex) get , set Method

----------------------------------------------------------------------------------------------------------
1. JFrame
:javax.swing
클래스 JFrame
java.lang.Object -  java.awt.Component  - java.awt.Container - java.awt.Window - java.awt.Frame
javax.swing.JFrame


setLayout(new GridLayout(3,1));
GridLayout : 3행 1열.
Component . requestFocus(); : Focus가 해당 Component로 이동.

버튼에는 ActionListener만 입력할수있다.
-----------------------------------------------------------------------------------------------------------
*어려운거~
addActionListener(this);
 KeyListener
  *Keypreseed(KeyEvent e) : 자판을 누를때
  *KeyReieased(KeyEvent e):  자판을 땟을때
  *KeyTyped(KeyEvent e)
*마우스 리스너도 있다.

KeyListener : Interface임. so 상속받을경우 메소드를 모두 재정의 해줘야하니까
   그게 싫은 사람은 KeyAdapter를 통해 필요한 메소드만 사용할수 있게함.

   무명 내부클래스 : 이해요망.
 <class>
 KeyAdapter (내가 필요한대로  도와주는 아이)
  tf1. addKeyListener(new KeyAdapter(){
    public void keyReleased(KeyEvent e){
     int a = e.getKeyCode();
     
     // Enter = int값 10이당~
     // KeyEvent.VK_ENTER : 쉽게 이해하기위해 10을 문자열로 변경한것,

     if(a == KeyEvent.VK_ENTER){
      String str = tf1.getText();
      th2.setText(str);
      tf1.setText("");
      tf1.requestFocus();
     }
    }
  }
key가 뭐를 입력하는지 듣고있는아이
-----------------------------------------------------------------------------------------------------------

Layout
1. BorderLayout

2. FlowLayout

3. GridLayout : 모두 동일한 크기로 할수 있다.

4. CardLayout : 카드처럼 쌓이는 형태


tf2.setEditable(false); : 수정이 불가능하게...
tf2.setBackground(Color.white); :색상변경.

스윙 튜토리얼, 소스 진짜잘나와있음.
자주 볼것...
sun.java.com

----------------------------------------------------------------------------------------------------------------------
밥먹구합시다~~
----------------------------------------------------------------------------------------------------------------------
  (2) 더블버퍼링
 <1> 설명
    다음에 그려질 이미지를 메모리상에서 미리 객체로 생성시켜
    놓고, 그것을 그대로 본래 보여줘야 할 곳에 표현하는 방식
 <2> 특징 : 연속된 그림을 보여줄 경우 화면의 깜빡임이 줄어든다.
 
 
  (3) 스윙의 컴포넌트, 컨테이너, 클래스 구조도 : 책608페이지부터 참고


* 연속된 그림을 보여줄때 깜빡거리는 현상을 줄여줌.
-------------------------------------------------------------------------------------------------------------------


<옛날에는 Applet을 많이 사용했으나 현재에는 사용을 안해용~>
MVC

 View : 화면으로 보이는 것,
 Contoller : 이벤트 처리를 관리하고 도와주는 아이~
 Model : Database의 안쪽에 관리하는 아이/
이렇게 나눠놓으면 확장성, 유지보수가 좋아진다.

만들기는 어렵고, 이해하기 어렵지만 나중에는 좋음.

View ------------ Controller

 Model : jdbc+Model (JTable)

 javax.swing

java.lang.Object  java.awt.Component java.awt.Container javax.swing.JComponent 
              javax.swing.JTable
클래스 JTable

AbstractTableModel : 객체를 못만든다.
JTable table;

----------------------------------------------------------------------------------------------------------------------------
사용 안함 넘어가도 됨.

3. Applet
  (1) Web에서 불러와서 실행 가능한 LifeCycle을 가진
    JAVA GUI Container
  (2) 특징
    <1> html 태그로 웹상에서 불러온다.
 <2> 클라이언트 시스템에서 Applet에 포함된 컴포넌트를 해석할
        수 있는 java(jre)환경이 구축되어 있어야 한다.
     -> HtmlConverter.exe 파일로 html을 변경하면 자바환경을
       바로 다운받을 수 있도록 태그 변경을 가할 수 있다.
    <3> LifeCycle이 존재하고, 그 사이클에 의해서 자동으로 실행된다.
 <4> 보안상 접근제한이 있다.
 <5> class 접근 제한자는 반드시 public 으로 해야한다.
  (3) LifeCycle
     --> 생성 ---> 활성화 <----> 비활성화 ---> 소멸
  init()       start()       stop()/start()        destroy()
-----------------------------------------------------------------------------------------------------------------------------

Beans
Beans에서 get set을 통해...

Beans사용이유
데이터를 가져올때 통째로 가져오게 하기위해서
그렇지 않을경우 배열로 가져와야하니까
다른 방법으로
ps 셀의 크기 조정하는 법 알아보기.
JFrame에 있는 validate : 최신 데이터로 갱신됨.

---------------------------------------------------------------------------------------------------------------------------

다른 카테고리의 글 목록

자바 기본 공부/스윙 기초 카테고리의 포스트를 톺아봅니다