▩ Graphics and SWING
   - paint() CallBack Method, 자동호출됩니다.

 

1. 문자열의 출력


>>>>> SwingGraphicsFrameMain.java
import java.awt.*;
import javax.swing.*;

class SwingGraphicsFrame extends JFrame {
    public SwingGraphicsFrame() {
        this.setTitle("Hello World!");
    }
   
    //자동 호출됩니다.
    public void paint(Graphics g) {
        g.drawString("Hello World!",  50,  50);
    }
}

 

public class SwingGraphicsFrameMain{
    public static void main (String[] args) {
        JFrame f = new SwingGraphicsFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(200, 100);
        f.setVisible(true);
    }    //end of main
}

 


2. 각종 도형의 출력


>>>>> SwingShapeFrameMain.java
import java.awt.*;
import javax.swing.*;

 

class SwingShapeFrame extends JFrame {
    public SwingShapeFrame() {
        this.setTitle("Draw Shape!");
    }
    public void paint(Graphics g) {
        g.drawString("Draw Shape!", 20,50);  //좌표 50,50에 스트링그리기
        g.setColor(Color.blue);                    //파란색으로 셋팅
        g.drawOval(50,60,30,30);                  //원그리기
        g.setColor(Color.red);                     //빨간색으로 셋팅
        g.drawLine(80,80, 100,100);              // 라인그리기
        g.setColor(Color.black);                  //검은색으로 셋팅
        g.drawRect(70,100,50,50);                //사각형 그리기
        g.setColor(Color.cyan);                   //오랜지색으로 셋팅
        g.fillRect(100,120,50,50);                   //채워진 사각형 그리기
    }
}       //end of SwingShapeFrame class

 

public class SwingShapeFrameMain {
    public static void main (String[] args) {
        JFrame f = new SwingShapeFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(200, 200);
        f.setVisible(true);
    }     //end of main
}

 

 


▩ Applet(Graphic)의 이해, Graphics 객체의 이용
   - 처리속도 때문에 그래픽관련 프로그램은 자바보다는 C언어관련 언어들을 사용합니다.


   - Plugin을 사용하는 Macromedia사의 Flash의 등장으로 Applet의 사용이 사라졌습니다.
      따라서, Applet으로 개발되었던 많은 동적 애니메이션을 플래쉬로 개발합니다.


   - Applet은 접속한 클라이언트로 다운로드되어 실행됩니다. 다운로드시 소요시간이 많이 발생함으로
      애플릿의 크기를 최대한 줄여야합니다.


   - Graphics 클래스는 그래픽을 구현하는 붓과 같은 역활을 합니다.

 

1. 애플릿이 실행되면 JVM이 자동으로 호출하는 메소드 목록(Call Back Method)
   - init() ---> start() ---> repaint() ---> update() ---> paint() ---> stop() ---> destroy()


     . init()       : 웹 페이지에서 처음으로 사용자가 애플릿을 로드할 때 호출되는 메서드입니다.
                       main()메소드와 같은 역활을 합니다.(★)
     . destroy() : 웹브러우저를 닫으면 애플릿을 끝내고 사용한 리소스를 해제하는 역활을 합니다.
     . stop()     : 애플릿이 나타나는 페이지를 보다가 다른 페이지나 주소로 이동했을 경우에

                       호출되는 메소드입니다.
     . start()     : 애플릿 페이지를 보다가 다른 페이지로 갔다가 다시 애플릿 페이지로 오면

                       호츌되는 메소드입니다.
     . paint()    : 애플릿이 다른 브러우저나 프로그램 창에 가려졌다가 다시 나타날경우에

                       다시 애플릿이 그려져야 하는데, 그 때 호출되는 메소드입니다.(★)
     . repaint() : 메소드는 애플릿을 다시 그려야 할 필요가 있는 경우 호출되며,
                      자동으로 배경색으로 화면을 지우는 update()메소드가 호출되고,
                      paint()메소드가 호출되어 최종적으로 화면에 애플릿을 그리는 일을하게 됩니다.
                      개발자는 코드상에서 paint()메소드를 호출할 수 없습니다.

 

   - 실제 개발시 Applet에서 AWT 콘트롤은 속도와 사이즈 때문에 사용되지 않습니다.
      이유는 애플릿의 사이즈가 커지게되고, 디자인이 투박하며, 서버에 많은 부담으로 작용하기

      때문에 콘트롤은 사용하지 마세요.

 

   - Applet 보안 (ActiveX는 가능)
     . 다운로드된 컴퓨터의 지역 프로그램을 실행 시킬 수 없다.
     . 다운로드되는 서버가 아닌 다른 컴퓨터와의 통신은 허용되지 않는다.
     . 다운로드된 컴퓨터의 로컬 파일시스템에 접근할 수 없다.
     . 애플릿들은 다운로드된 컴퓨터의 정보를 알수 없다.
     . 이러한 제약이 MS의 ActiveX는 가능하여 클라이언트의 컴퓨터를 세밀하게 조작할수 있으나

       보안에 노출되는 문제가 발생하기도 합니다.


   - x,y 좌표의 기준(좌측상단 기준, 모니터의 신호 주사방향과 일치)
         
     0,0 (x=0, y=0)                           200, 0(x=200, y=0)
     ┌──────────────┐

     │                                          │
     │                                          │
     │                                          │
     │                                          │
     │                                          │
     │                                          │
     │                                          │
     │                                          │
     └──────────────┘
    0, 200(x=0, y=200)                      200, 200(x=200, y=200)

 

 


1. 사각형 그리기

 

>>>>> GraphicsRectangles.java

import java.awt.*;
import java.applet.*;

 

public class GraphicsRectangles extends Applet {
  public void paint(Graphics g) {
    //drawRect(int x, int y, int width, int height)
    g.drawRect(10, 10, 100, 100);
   
    //fillRect(int x, int y, int width, int height)
    g.fillRect(120, 10, 100, 100);
   
    //fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
    g.fillRoundRect(10, 120, 100, 100, 15, 15);
   
    //drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
    g.drawRoundRect(120, 120, 100, 100, 30, 40);
  }
}

 

 


2. 타원 그리기


>>>>> GraphicsCircle.java
/*
<html>
<head><title>그래픽 객체예제 - 원 & 호 </title></head>
<body>
<applet code="GraphicsCircle" width=350 height=300>
</applet>
</body>
</html>
*/
import java.awt.*;
import java.applet.*;

 

public class GraphicsCircle extends Applet {
  public void paint(Graphics g) {
    //drawOval(int x, int y, int width, int height)  
    g.drawOval(10, 10, 50, 50);
   
    //fillOval(int x, int y, int width, int height)
    g.fillOval(100, 10, 75, 50);
   
    //drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
    g.drawArc(210, 50, 70, 70, 0, 75);
   
    //fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)
    g.fillArc(150, 50, 90, 90, 0, 75);
   
    //drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
    g.drawArc(10, 100, 70, 80, 0, 175);
   
    //fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)
    g.fillArc(100, 100, 70, 90, 180, 270);
  }
}

 

 


3. >>>>> ColorExam.java

/*
<html>
<head><title>Color 예제</title></head>
<body>
<applet code="ColorExam" width=300 height=200>
</applet>
</body>
</html>
*/

 

import java.awt.*;
import java.applet.*;


public class ColorExam extends Applet {
  // draw lines
  public void paint(Graphics g) {
    //RGB, Red, Green, Blue, 0~255 
    Color c1 = new Color(255, 100, 100);
    Color c2 = new Color(100, 255, 100);
    Color c3 = Color.YELLOW;

 

    g.setColor(c1);
    g.drawLine(0, 0, 100, 100);
   
    g.setColor(c2);
    g.drawLine(40, 25, 250, 180);
 
    g.setColor(c3);
    g.drawLine(20, 150, 400, 40);
  
    g.setColor(Color.red);
    g.drawOval(10, 10, 50, 50);
    g.fillOval(70, 90, 140, 100);

 

    g.setColor(Color.blue);
    g.drawOval(190, 10, 90, 30);
    g.drawRect(10, 10, 60, 50);

 

    g.setColor(Color.cyan);
    g.fillRect(100, 10, 60, 50);
    g.drawRoundRect(190, 10, 60, 50, 15, 15);
  }
}

 

 


4. >>>>> SetFont.java


/*
<html>
<head><title>Font예제</title></head>
<body>
<applet code="SetFont" width=400 height=150>
</applet>
</body>
</html>
*/

 

import java.awt.*;
import java.applet.*;

 

public class SetFont extends Applet {
   Graphics g;
   Font courier;
   Font timesroman;
   Font symbol;
   Font etc;
  
public void init() {
   courier = new Font("Courier",Font.BOLD,20);
   timesroman = new Font("Timesroman",Font.BOLD,20);
   symbol = new Font("궁서체",Font.BOLD,20);
   etc = new Font("굴림",Font.BOLD,20);
 }

 

public void paint(Graphics g) {
   g.setFont(courier);
   g.drawString("Teach you self JAVA : Courier ",20,20);
   g.setFont(timesroman);
   g.drawString("Complete Reference JAVA :  Timesoroman ",20,50);
   g.setFont(symbol);
   g.drawString("궁서체 실습입니다.",20,82);
   g.setFont(etc);
   g.drawString("알기쉽게 해설한 자바 : 굴림체",20,118);
   }
}

 


Posted by 영웅기삼
,