▩ 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);
}
}
'Programming > JAVA' 카테고리의 다른 글
Java Communications API (Java를 이용한 Serial통신 .. (0) | 2006.12.08 |
---|---|
JDOM 프로그래밍 (0) | 2006.10.26 |
[02주] JAVA Programming - 자바 용어정리 및 정의와 .. (0) | 2006.09.19 |
XSLT (0) | 2006.04.13 |
[자바(JAVA)응용강좌] 네트워크 게임 만들기 (0) | 2006.04.10 |