7월12일 그래픽(Toolkit ,Dimension
두 메소드의 시그니쳐(signature)를 동일하게 해야 한다
시그니쳐는 함수의 인터페이스가 같다는것이다.
그래픽
Toolkit : 우리가 지금사용하는 대한 시스템적인 정보
Dimension : 객체의 크기에 대한 정보
Toolkit aToolkit = aWindow.getToolkit();
Dimension sizeOfWindow = aToolkit.getScreenSize();
aWindow라는 객체어플리케이션으로 창을 뛰우기위해서 만든 객체로 Toolkit을 통해서 실질적인 정보를 받아온다 그리고 Dimension을 통행서 Toolkit의 시스템정보중 하나인 ScreenSize대한 즉 모니터의 정보를 가져온다. 그래서 sizeOfWindow에 전체적인 모니터의 크기 X,Y Width,Heigh를 알아낼수있다.
윈도우는 이벤트처리 시스템이다 자바역시 이벤트처리 시스템이 비슷하다 단지 자바는 모든 자료와 처리를 클래스단위로 하기때문에 조금 차이가 난다. 하지만 거의 비슷하다.
public class WindowSizeClass extends Frame
우리가 사용하는 윈도우창같은것을 띄우기 위해서는 Frame이라는 클래스를 상속받아서 한다. Frame클래스에 대한 내용은 조금있다가 다시 설명하겠다.
public static void main (String[] args) 메인을 생성하게되면 한 프로그램을 돌리기위해서 클래스에 안에 들어가있다 그래서 그안에서 유일하게 main은 하나만 생성되어야하기때문에 당연히 static으로 선언해준다. 그리고 우리가 윈도창을 띄우기위해서 public class을 생성하기때문에 main에서 받으려면 객체를 생성 즉 자바에서 객체포인터를 생성하고 할당을 받아서 넣어야한다.
WindowSizeClass aWindow = new WindowSizeClass();
이제 그 정보다 aWindow는 윈도우를 띄우기위한 어플리케이션객체를 만들었다.
aWindow.addWindowListener (new WindowHandler()); 사실 처음보고 생소한 WindowListener이다.
winAPI에서 이벤트를 처리하기위해서 생성되는 winproc과 같다고 생각하면된다. Listrener을 해서 프로그램이 다하는게 아니라 약간 음지!!인 컴퓨터 자체내에서 처리하게 된다.
winproc으로 생성되는 iMessage를 통해서 switch문을 통해서 WM_PAINT와 WM_CREATE같이 처리하지만 자바에서 단지 addWindwoListener을 통해서 객체를 참조하고
aWindow.setBounds (x, y,Wdth,hight); 통해서 윈도우의 위치와 크기를 정의한다.
aWindow.show(); 통해서 WinAPI를 windowshow같이 윈도우를 띄우는것이다.
public void paint (Graphics g) {
}
paint하니깐 먼가 그리는것 같은 느낌이 든다.
이것은 바로 winapi의 WM_PAINT와 동작이 똑같다. 저안에서 동작하는 문자열을 출력이나 그림을 그린다.
다음 애플릿을 생성된 자바의 출력방법이다.
난 솔직히 좀 몰라서 찾아보지는 않았고 이클리스를 사용했더니 바로 되었다. 하지만
명령프롬프트에서 그냥 간단하게 가능하다.
애플릿은 자바 웹에서 사용하기위해서 만들어진 파일과 비슷하다 애플릿 서브릿 같이 applet, servlet같이 마지막이 let으로 끝난다. 그래서 웹에서 사용이가능하기때문에 사용하기위해서는 <html> 문법처럼 해야한다. 기초는
<html>
<head>
<title>applet test</title>
</head>
<body>
<applet code ="ButtonApplet.class" WIDTH = 300 HEIGHT = 300> </APPLET>
</body>
</html>
이것이다 그래서 <applet code ="클래스이름 " WIDTH= HEIGHT= > </applet>이렇게 마무리 지으면 된다.
그리고 도스창에서 실행할려면 appletviewer ***.html을 실행시키면 간단하다!!!!
이것도 모르고 이클리습에서 돌렸다 ㅠ
delegation event model : 이벤트를 발생시키는것을
9.6.2 애플릿의 기본 메소드
애플릿 클래스에는 애플릿의 실행을 위하여 네기본 메소드가 정의되어 있다.
이 메소드는 웹 브라우져에 의해서 호출된다.
애플릿 프로그램은 이 메소드들을 재정의하여 작성되는 것이 일반적이다.
(1) public void init()
웹 서버로부터 애플릿을 다운로드받을 때
맨 처음에 실행되는 메소드로 단 한번만 실행된다.
애플릿이 실행되는 데 필요한 초기화 작업이 init() 메소드에서 이루어진다.
그래픽 사용자 인터페이스를 위한 컴포넌트의 구성은 init()에서 작성된다.
(2) public void start()
init() 메소드 다음으로 실행되는 메소드이다.
사용자가 웹 브라우징 세션내에서 다른 페이지로 이동하면
애플릿의 실행은 중단된다.
사용자가 다시 원래 페이지로 돌아왔을 때
애플릿의 실행이 재개되면서 start() 메소드는 다시 실행된다.
따라서 start() 메소드는 애플릿이 살아있는 동안 여러 번 실행된다.
start() 메소드는 애플릿이 다시 실행에 필요한 초기화작업을 수행한다.
이에 비해 init() 메소드는 처음에 한번만 실행된다.
(3) public void stop()
사용자가 다른 웹 페이지로 이동하면 애플릿의 실행이 중단되면서 호출된다.
stop() 메소드는 애플릿의 실행을 중단하는 데 필요한 작업을 수행한다.
stop() 메소드가 없을 경우 사용자가 다른 페이지로 이동한 후에도
애플릿의 실행은 계속된다.
(4) public void destroy()
사용자가 웹 페이지를 떠난 후,
웹 브라우져가 더 이상 애플릿이 필요없다고 판단할 경우 호출된다.
애플릿이 실행되는 데 사용되었던 시스템의 자원을 운영체제로 돌려준다.
윈도우를 닫을 때 호출되어 애플릿 실행의 종료에 필요한 작업을 수행한다.
보통 웹 브라우져가 필요한 작업을 수행하기 때문에 재정의할 필요가 없다.
위에 4가지 작업은 API에서 배운 작업에서 비슷핟다 init()와 destroy()같은경우 Dialog를 만들었을대 첫 진입점과 마지막 끝내고 파괴하는 것 이랑 똑같다. 그래서 애플릿을 이용하게 되면 아주 간단하게 저 4가지를 통해서 생성하고 쉽게 할수 있다
그리고 application같은경우도 window의 extends Frame을 통해서 받거나 아니면 Applet을 상속받아서 객체포인터생성과 할당후에 똑같이 사용이 가능하다
이장점을 통해서 자바는 웹에도 쉽게 사용이 가능하고 일단 콘솔인 내컴퓨터에서 사용이 가능하다.
// 애플릿과 어플리케이션으로 사용할 수 있게 작성된 프로그램
=======================================================
=======================================================
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class exam09 extends Frame{
Button Button01;
public exam09()
{
super("Window Make");
}
public static void main(String[] args)
{
exam09 w = new exam09();
w.addWindowListener(new WindowHandler());
w.setBounds(50,30,300,500);
w.setVisible(true);
Button01 = new Button("Num01 Button");
Button01.addActionListener(new NewButtonHandler(Button01));
}
public void paint(Graphics g)
{
}
}
class WindowHandler extends WidowAdapter
{
public void WindowClosing (WindowEvent e)
{
System.exit(0);
}
}
class NewButtonHandler implements ActionListener {
Button aButton;
public NewButtonHandler (Button paraButton) {
aButton = paraButton;
aButton.setBackground (Color.yellow);
}
public void actionPerformed (ActionEvent e) {
exam09 f = new exam09();
w.addWindowListener(new WindowHandler());
w.setBounds(50,30,300,500);
w.setVisible(true);
}
}
import java.awt.event.*;
import java.applet.*;
public class ApplicationAppletClass extends Applet {
Button yellowButton;
public void init() {
yellowButton = new Button ("Yellow Button");
yellowButton.addActionListener (new YellowButtonHandler (yellowButton));
add (yellowButton);
}
public static void main (String[] args) {
Frame aWindow = new Frame ("Application");
aWindow.setSize (200, 150);
aWindow.addWindowListener (new WindowHandler());
ApplicationAppletClass anApplet = new ApplicationAppletClass();
aWindow.add (anApplet, BorderLayout.CENTER);
anApplet.init(); // 애플릿을 실행 시킨다.
anApplet.start();
aWindow.setVisible (true);
}
}
class YellowButtonHandler implements ActionListener {
Button aButton;
public YellowButtonHandler (Button paraButton) {aButton = paraButton;}
public void actionPerformed (ActionEvent e) {
aButton.setBackground (Color.yellow);
}
}
class WindowHandler extends WindowAdapter {
public void windowClosing (WindowEvent e) {
System.exit (0);
}
}