GUI - AWT : 이벤트처리
- SWING : 컴포넌트
◈ AWT ◈
▷ 하나의 코드를 가지고 여러 OS에서 동일한 형태로 실행이 되어야 하기 때문에 특정 OS에서만 제공한하는 GUT컴포넌트는 AWT에서 포함시킬수없다.
▷ OS에 종속됨
◈ Swing(스윙) ◈
▷
스윙은 AWT의 단점을 보안. 개발된 자바 라이브러리.▷ 스윙의 장점은 코드전체가 자바로 되어있어서 OS에 종속되는 부분이 없다.
OS에 종속되는 부분이 없어 기존의 컴포넌트를 확장가능.
▷ 스윙으로 작성한 코드는 OS에 상관없이 어디서나 동일한 결과가 나온다.
AWT에 있는기능은 스윙에 있지만 스윙에 있는 기능은 AWT에 없다.
◆ Component ◆
└ 스윙의 컴포넌트는 대부분 javax.swing.JComponent클래스를 상속방아 사용.
└ JComponent클래스는 AWT의 java.awt.Container를 확장한 클래스
Component <==== Container <==== JComponent
(java.awt) (java.awt) (javax.sing)
◆ JComponent ◆
└ 툴팁(ToolTip)
- 모든 컴포넌트에서는 풍선 도움말을 작성 할 수 있다.
풍선도움말을 컴포넌트 위에 마우스를 올려 놓았을 때 도움말이 나타나게 된다.
- 툴팁 텍스트를 설정하려면 selToolTipText메소드를 이용.
public void setToolTipText(String tooltipMessage)
└ 더블버퍼링 =>깜빡거리는 형상을 줄임.
- 스윙에서 자체적으로 지원.
└ 테두리(Border) : 컴포넌트의 테두리를 임의의 형태로 작성.
- 컴포넌트에 테두리를 변경하고 싶다면
public void setBorder(Border border)
◆ Container ◆
└ 컨테이너는 다른 컴포넌트를 담기 위해 특화된 컴포넌트로 각 컨테이너마다 컴포넌트를 담는 방식.
└ 컨테이너는 AWT의 컨테이너를 상속받아 구현된 최상의 컨테이너와 JComponent를 상속받아서 구현된 일반컨테이너와 구분
└ 최상의 컨네이너 구조(JWindow, JDialog, JApplet, JFrame)이 있는데 각각의 AWT의 Window,Dialog,Frame을 상속받아서 구현한 컨테이너이다.
└ 최상위 컨테이너는 Swing's GUI Application Program을 할 때 최소한 한개 이상을 가지고 있다.
└ 최상위 컨테이너는 컴포넌트를 직접적으로 추가하지 않고, 포넌트의 추가/삭제를 JRootPane클래스에 위임하는 구조를 갖는다.
- layerdPane에는 ContentPane하고 GlassPane이 있고, LayerPane은 RootPane에 붙고 RootPane은 Frame에 붙는다.
- 컴포넌트를 붙일때는 ContentPane에 붙인다.
===================================================================
**최상에는 JFrame이 있다.
==================================================================
awt는 바로 frameㅇ을 content를 붙이지만 swing에서는 JFrame에 JComponent를 추가 할 수 없다.
왜냐하면 컴포넌트의 추가/삭제는 JRootPane에 위임하기 때문이다.
따라서 대부분의 컴포넌트는 ContentPane에 추가/삭제하도록 되어있다.
⊙ setSize(400,500);
└ JFrame에 width와 height를 지정한다. -setSize는 프레임의 크기
⊙ pack();
└ pack() 컴포넌트 크기만큼 JFrame의 사이즈를 구성한다.
⊙ setLocation(500,500);
└ JFrame에 시작 위치(width,height)를 지정.
⊙ setBounds(500,500,400,500);
└ 크기와 위치를 동시에 지정 -setBounds(setSize,setLocation);
⊙ setVisible(true);
└ JFrame을 보여주는지를 지정. true=>보여준다 / false=>보여주지 않는다.
⊙ setDefaultCloseOperation =>JFrame 종료 할때 어떤 동작할 것인가를 지정
<옵션>
└ DO_NOTHING_ON_CLOSE : 종료를 눌렀을때 아무 동작도 하지 말아라.
└ HIDE_ON_CLOSE (default) :프로그램 종료 하지 않은 상태에서 숨어있어라.
└ DIPOSE_ON_CLOSE : 현재프레임만 종료하라.
└ EXIT_ON_CLOSE : 모든 프레임을 종료하라.
⊙ setResizable(true);
└ 프레임의 크기를 고정할 것인가 를 지정. true=>사이즈를 변경 가능. false=> 사이즈 변경 불가능.
⊙ JFrame.setDefaultLookAndFeelDecorated(true);
└ JFrame을 JAVA LookAndFeel로 바꿔주는 메소드. 만약 false일경우 자바로 변경이 안됨.
주의) JFrame 객체가 생성되기 이전에 호출되어야 한다.
ex> public static void main(String[] args){
JFrame.setDefaultLookAndFeelDecorated(true);
new JFrameDemo("프레임 테스트");
}
======================jframe을 상속받은 경우============================
package swing;
import java.awt.*;
import javax.swing.*;
public class JFrameDemo extends JFrame{
public JFrameDemo(String title){
super(title);
JButton jbtn=new JButton("테스트");
Container contentPane=getContentPane();
contentPane.add(jbtn);
setSize(400,500);
setLocation(500,500);
setVisible(true);
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
setResizable(true);
}
public static void main(String[] args){
JFrame.setDefaultLookAndFeelDecorated(true);
new JFrameDemo("프레임 테스트");
}
}
===========================jframe을 상속 받지 않은 경우========================
package swing;
import java.awt.*;
import javax.swing.*;
public class JFrameEx {
public JFrameEx(String title){
//부모가 없어지면 new를 통해 부모를 생성하고
// 부모가 사용했던 래퍼런스는 부모.래퍼런스로 접근해주면 된다.
JFrame jframe=new JFrame(title);
JButton jbtn=new JButton("테스트");
Container contentPane=jframe.getContentPane();
contentPane.add(jbtn);
jframe.setLocation(500,500);
jframe.setVisible(true);
jframe.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
jframe.setResizable(true);
}
public static void main(String[] args){
JFrame.setDefaultLookAndFeelDecorated(true);
new JFrameDemo("프레임 테스트");
}
}
===================================================================