Graphics 클래스는 기본 그리기 방법을 제공하고 Graphics2D 클래스는 더욱 강력한 그리기 기능을 제공합니다. 이 섹션에서는 Graphics 클래스에 대해 설명하고 다음 섹션에서는 Graphics2D에 대해 설명합니다.
Graphics 클래스는 주로 선분 그리기, 직사각형 그리기, 원 그리기, 컬러 그래픽 그리기, 타원 그리기, 호 그리기, 다각형 그리기 등을 포함한 기본 기하학적 그리기 방법을 제공합니다.
1. 선 그리기 <br />창에 선분을 그리려면 Graphics 클래스의 drawLine() 메서드를 사용할 수 있습니다.
drawLine(int x1,int y1,int x2,int y2)
예를 들어 다음 코드는 점 (3,3)과 점 (50,50) 사이에 선분을 그리고 점 (100,100)에 점을 그립니다.
g.drawLine(3,3,50,50);//선분을 그립니다. g.drawLine(100,100,100,100);//점을 그립니다.
2. 직사각형 그리기 <br />직사각형에는 일반 직사각형과 둥근 직사각형의 두 가지 유형이 있습니다.
(1) 일반적인 직사각형을 그리는 방법에는 두 가지가 있습니다.
drawRect(int x, int y, int width, int height): 와이어프레임으로 둘러싸인 직사각형을 그립니다. x와 y 매개변수는 왼쪽 위 모서리의 위치를 지정하고, width와 height 매개변수는 직사각형의 너비와 높이를 지정합니다.
fillRect(int x, int y, int width, int height): 미리 정해진 색상으로 직사각형을 채워 색상이 지정된 직사각형 블록을 얻습니다.
다음 코드는 직사각형을 그리는 예입니다.
g.drawRect(80,100,40,25);//와이어 프레임 그리기 g.setColor(Color.yellow);g.fillRect(20,70,20,30);//채색 블록 그리기
(2) 둥근 직사각형을 그리는 방법에는 두 가지가 있습니다.
drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight): 선으로 둘러싸인 둥근 사각형입니다. 매개변수 x와 y는 직사각형의 왼쪽 위 모서리 위치를 지정합니다. 매개변수 width와 height는 직사각형의 폭과 높이입니다. arcWidth와 arcHeight는 각각 필렛 호의 가로 지름과 세로 지름입니다.
fillRoundRect(int x, int y, int width, int height, int arcWidth, int archeight): 미리 결정된 색상으로 채워진 둥근 사각형입니다. 각 매개변수의 의미는 이전 방법과 동일합니다.
다음 코드는 직사각형을 그리는 예입니다.
g.drawRoundRect(10,10,150,70,40,25);//둥근 사각형을 그립니다. g.setColor(Color.blue); g.fillRoundRect(80,100,100,100,60,40);//둥근 직사각형 블록 그리기 g.drawRoundRect(10,150,40,40,40,40);//원 그리기 g.setColor(Color.red); g.fillRoundRect(80,100,100,100,100,100);//원 그리기
둥근 직사각형을 그려서 원을 그릴 수 있습니다. 직사각형의 너비와 높이가 같으면 둥근 호의 가로 지름과 둥근 호의 세로 지름도 같고 너비와 높이도 같습니다. 직사각형, 원이 그려집니다. 위 예시의 설명을 참고하세요. 전자는 원을 그리는 것이고, 후자는 원 블록을 그리는 것입니다.
3. 3차원 직사각형 그리기 <br />3차원 직사각형을 그리는 방법에는 두 가지가 있습니다.
draw3DRect(int x,int y,int width,int height, booleanised): 강조 표시된 사각형을 그립니다. 그 중 x와 y는 직사각형의 왼쪽 상단 모서리 위치를 지정하고, width 및 height 매개변수는 직사각형의 너비와 높이이며, 상승된 매개변수는 강조 표시 여부입니다.
fill3DRect(int x,int y,int width,int height,booleanised): 강조 표시된 사각형을 미리 결정된 색상으로 채웁니다.
다음 코드는 돌출된 직사각형을 그리는 예제입니다.
g.draw3DRect(80,100,40,25,true);//와이어프레임 그리기 g.setColor(Color.yellow) g.fill3DRect(20,70,20,30,true);//채색 블록 그리기
4. 타원 그리기 <br />타원은 타원의 수평축과 수직축에 의해 결정됩니다. 타원을 그리는 방법에는 두 가지가 있습니다.
drawOval(int x, int y, int width, int height): 선으로 둘러싸인 타원을 그립니다. x와 y 매개변수는 타원의 왼쪽 위 모서리 위치를 지정하고, width와 height 매개변수는 가로축과 세로축을 지정합니다.
fillOval(int x, int y, int width, int height): 미리 정해진 색상으로 채워진 타원이며 색칠 블록입니다. 타원을 그리는 방법을 사용하여 원을 그릴 수도 있습니다. 가로축과 세로축이 같으면 그려지는 타원은 원이 됩니다.
다음 코드는 타원을 그리는 예입니다.
g.drawOval(10,10,60,120);//타원 그리기 g.setColor(Color.yan);g.fillOval(100,30,60,60);//원 그리기 g.setColor(Color.magenta ) ;g.fillOval(15,140,100,50);//타원 그리기
5. 호 그리기
호를 그리는 방법에는 두 가지가 있습니다.
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle): 타원의 일부로 호 선을 그립니다. 타원의 중심은 둘러싸는 직사각형의 중심입니다. 여기서 매개변수는 둘러싸는 직사각형의 왼쪽 위 모서리의 좌표(x, y)이고 너비는 너비, 높이는 높이입니다. startAngle 파라미터의 단위는 "degree"이며, 시작 각도 0도는 3시 위치를 의미합니다. startAngle과 arcAngle 파라미터는 startAngle 각도를 기준으로 반시계 방향으로 arcAngle 도의 호가 그려지는 것을 나타냅니다. 관례적으로 양의 각도는 시계 반대 방향입니다. 예를 들어 -90도는 6시입니다.
fillArc(int x, int y, int width, int height, int startAngle, int arcAngle): setColor() 메서드에서 설정한 색상을 사용하여 색상이 지정된 타원의 일부를 그립니다.
다음 코드는 호를 그리는 예입니다.
g.drawArc(10,40,90,50,0,180);//호선 그리기 g.drawArc(100,40,90,50,180,180);//호선 그리기 g.setColor(Color.yellow); g.fillArc(10,100,40,40,0,-270);//오른쪽 위 모서리가 누락된 타원의 3/4을 채웁니다. g.setColor(Color.green) g.fillArc(60,110,110,60,-90 ,- 270);//타원의 누락된 왼쪽 하단 모서리의 4분의 3을 채웁니다.
6. 다각형 그리기 <br />다각형은 여러 선분을 끝에서 끝까지 연결하여 형성된 닫힌 평면 도형입니다. 다각형 선분의 끝점의 x 좌표와 y 좌표는 각각 두 개의 배열에 저장됩니다. 다각형을 그리는 것은 주어진 좌표점 순서대로 직선 세그먼트로 연결하는 것입니다. 다음은 다각형을 그리는 데 일반적으로 사용되는 두 가지 방법입니다.
drawPolygon(int xpoints[],int yPoints[],int nPoints): 다각형 그리기
fillPolygon(int xPoints[],int yPoints[],int nPoints): setColor() 메서드에서 설정한 색상으로 다각형을 색칠합니다. xPoints[] 배열은 x 좌표 포인트를 저장하고, yPoints[]는 y 좌표 포인트를 저장하며, nPoints는 좌표 포인트의 수입니다.
위의 방법은 다각형을 자동으로 닫지 않는다는 점에 유의하세요. 닫힌 다각형을 그리려면 주어진 좌표점의 마지막 점이 첫 번째 점과 같아야 합니다. 다음 코드는 삼각형 채우기 및 팔각형 그리기를 구현합니다.
int px1[]={50,90,10,50};//첫 번째와 마지막 점이 동일한 경우에만 다각형을 그릴 수 있습니다. int py1[]={10,50,50,10}; ]={140,180,170,180,140,100,110,140}; py2[]={5,25,35,45,65,35,25,5}; g.setColor(Color.blue) g.fillPolygon(px1,py1,4); ; g.drawPolygon(px2,py2,9);
다각형 개체를 사용하여 다각형을 그릴 수도 있습니다. 다각형 클래스 Polygon을 사용하여 다각형 개체를 만든 다음 이 개체를 사용하여 다각형을 그립니다. Polygon 클래스의 주요 메소드:
예를 들어, 다음 코드는 삼각형을 그리고 노란색 삼각형으로 채웁니다. 닫힌 다각형을 그리기 위해 다각형 객체를 사용하는 경우 첫 번째 점과 마지막 점이 일치할 필요는 없습니다.
int x[]={140,180,170,180,140,100,110,100}; int y[]={5,25,35,45,65,45,35,25}; 다각형 다각형1=new 다각형(); .addPoint(90,50); 폴리곤1.addPoint(10,50); g.drawPolygon(폴리곤1); g.setColor(Color.yellow); 폴리곤 폴리곤2 = new Polygon(x,y,8);
7. 직사각형 블록 지우기 <br />컬러 그래픽 중간에 빈 직사각형이 필요한 경우 배경색으로 직사각형 블록을 채울 수 있습니다. 이는 직사각형 블록에 "지우개"를 사용하는 것과 같습니다. 방법은 다음과 같습니다.
clearRect(int x, int y, int width, int height): 매개변수로 지정된 직사각형 블록의 색상을 지웁니다.
예를 들어, 다음 코드는 원 안의 직사각형 블록을 지우는 색상 지정을 구현합니다.
g.setColor(Color.blue); g.fillOval(50,50,100,100);g.clearRect(70,70,40,55);
8. 도면 표시 영역을 제한합니다. <br />그래프의 표시 영역을 나타내기 위해 직사각형을 사용합니다. 그래프는 지정된 범위 내에서 유효해야 하며, 초과된 좌표 값은 다시 계산되지 않습니다. 부분은 자동으로 표시되지 않습니다. 메소드는 그래픽 표시를 지정된 영역으로 제한하고 초과 부분은 표시하지 않는 clipsRect(int x, int y, int width, int height) 입니다. 여러 제한 구역을 덮을 경우 제한 구역의 교차 면적을 구합니다. 예를 들어, 코드는 다음과 같습니다.
g.clipRect(0,0,100,50);g.clipRect(50,25,100,50);
동등하다
g.clipRect(50,25,50,25);
9. 그래픽 복사 <br />그래픽 클래스의 copyArea() 메소드를 사용하여 그래픽을 복사합니다.
copyArea(int x, int y, int width, int height, int dx, int dy), dx 및 dy는 각각 그래픽을 원래 위치에 붙여넣어 오프셋된 픽셀 수를 나타냅니다. 양수 값은 오른쪽 또는 오른쪽으로 오프셋을 의미합니다. 음수 값은 왼쪽 또는 위쪽으로 오프셋됩니다. 변위의 기준점은 복사할 직사각형의 왼쪽 상단 모서리 좌표입니다.
예를 들어, 다음 코드는 한 직사각형의 일부와 다른 직사각형 전체를 사용자 정의하여 그래픽을 복사하는 방법을 보여줍니다.
g.drawRect(10,10,60,90); g.fillRect(90,10,60,90); g.copyArea(40,50,60,70,-20,80); 50,60,60,10,80);
[예] 작은 응용 프로그램은 텍스트가 아닌 원 블록만 지우도록 update() 메서드를 다시 작성하며 창에는 끊임없이 움직이는 빨간색 사각형이 표시됩니다.
import java.applet.*;import java.awt.*;public class example7_3 확장 Applet{ int i=1; public void init(){ setBackground(Color.yellow) } public void Paint(Graphics g){ i = i +8; if(i>160)i=1;g.setColor(Color.red);g.fillRect(i,10,20,20); g.drawString("update() 메소드를 배우고 있습니다.",100,100); try{ Thread.sleep(100) } catch(InterruptedException e){} repaint() } public void update(Graphics g){ g .clearRect (i,10,200,100);//"update() 메서드를 배우고 있습니다"를 지우지 마세요. 페인트(g) }}
일반 그리기 프로그램은 JFrame을 상속하고 JFrame 창 하위 클래스를 정의해야 하며, 또한 JPanel을 상속하고 JPanel 하위 클래스를 정의해야 합니다. JPanel 하위 클래스의 PaintComponent() 메소드를 재정의하고 이 메소드에서 그리기 메소드를 호출하여 다양한 그래픽을 그립니다.
[예제] XOR 그리기 모드를 사용한 응용 프로그램입니다.
import javax.swing.*;import java.awt.*;public class 예제7_4 확장 JFrame{ public static void main(String args[]){ GraphicsDemo myGraphicsFrame = new GraphicsDemo() }}class ShapesPanel 확장 JPanel{ SharpesPanel(){ setBackground(Color.white); } public void PaintComponent(그래픽 g){ super.paintComponent(g); setBackground(Color.yellow); //배경색은 노란색입니다. g.setXORMode(Color.red); //XOR 그리기 모드를 설정하고 색상은 빨간색입니다. g.setColor(Color.green); 20, 80 , 40); //실제 색상은 녹색 + 노란색 = 회색의 혼합 색상입니다. g.setColor(Color.yellow) g.fillRect(60, 20, 80, 40); //두 번째 절반은 노란색+노란색=읽기, 첫 번째 절반은 노란색+회색 g.setColor(Color.green); //실제 색상은 다음과 같습니다. 녹색+노란색 혼합 색상 = 회색.g.fillRect(60, 70, 80, 40) //첫 번째 절반은 (녹색+노란색)+회색입니다. =배경색, 마지막 절반은 녹색+노란색 = 회색 g.setColor(Color.green); g.drawLine(80, 100, 180, 200) //직선은 녹색+노란색 = 회색 g.drawLine( 100, 100, 200, 200); //위와 동일/*부분적으로 겹치는 직선을 그린다. 원래 직선의 중간 부분은 회색+회색=배경색이고, 확장된 부분은 녹색+노란색=회색이다.*/ g.drawLine(140, 140 , 220, 220); g.setColor(Color.yellow); //이전 힘과 겹치는 다음 직선의 색상 변화를 분석합니다. g.drawLine(20, 30, 160, 30); g.drawLine(20, 75, 160, 75); }}class GraphicsDemod 확장 JFrame{ public GraphicsDemo(){ this.getContentPane().add(new ShapesPanel()); setTile("기본 그리기 방법 데모"); (300, 300); setVisible(참) }}