[TIL] 다차원 배열, 시각화를 위한 그래픽 플랫폼
1) 다차원 배열 vs 구조체 일차원 배열
1-1) 톱니형이란?
-
이차원 배열은 일차원 배열에 차원 하나를 더 추가하는 방식이다.
-
각각의 공간을 엮어내는 방식이다.
-
임시 공간을 만들어내어 순서를 바꾸는 것이 가능하다.
-
int[][] lottos = new int[3][6]
처럼 일차원 공간을 한번에 만들 수 있다. -
int[][] lottos = new int[3][]
처럼 일차원 공간은 나중에 만들 수도 있다. -
일차원 공간을 나중에 만들 때에는 각 공간의 크기를 다르게 할 수 있으며 이를 톱니형이라고 한다.
1-2) 다차원 배열과 구조체 일차원 배열
int[][] lottos= new int[3][6];
과 같은 방식은 추후 복잡해질 가능성이 있다.- 그래서 번거롭더라도
Lotto[] lottos = new Lotto[3];
과 같은 방식이 더 낫다.
2) 시각화를 위한 그래픽 플랫폼
2-1) Frame에 Canvas를 나중에 붙인 경우
package ex8.game.basic1;
import java.awt.Canvas;
public class Program {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setBounds(300,10,500,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GameCanvas canvas = new GameCanvas();
frame.add(canvas);
canvas.setVisible(true);
}
}
-
위 코드에서는 그림을 그려도 제대로 나오지 않는다.
-
왜냐하면 Canvas는 paint라는 함수를 갖는데 paint라는 함수에 들어가 있지 않은 로직은 무조건 지워진다.
-
paint가 활성화 될때마다 지워지므로 밖에서 그리는 것은 아무 의미가 없게된다.
- 그래서 위의 코드를 아래와 같이 바꿔준다.
2-2) Frame에 Canvas를 먼저 붙인 경우
package ex8.game.basic1;
import java.awt.Canvas;
public class Program {
public static void main(String[] args) {
JFrame frame = new JFrame();
GameCanvas canvas = new GameCanvas();
frame.add(canvas);
frame.setBounds(300,10,500,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
canvas.setVisible(true);
}
}
-
이 코드처럼 frame에 canvas를 붙이는 작업을 먼저 해준 후 그림을 그린다.
-
JFrame
으로frame
을 생성해준다. -
GameCanvas
를 위해GameCanvas.java
를 만들어주고 canvas를 생성해준다. -
frame.add(canvas);
를 통해 캔버스를 프레임에 붙여준다. -
frame.setBounds(x,y,width,height);
로 프레임의 좌표와 크기를 지정해준다. -
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
을 통해 윈도우를 닫아주면 작업도 중지되도록 해준다.
2-3) GameCavnas 클래스
package ex8.game.basic1;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;
public class GameCanvas extends Canvas{
Image img;
int dx = 0;
int dy = 0;
public GameCanvas() {
Toolkit tk = Toolkit.getDefaultToolkit();
img = tk.getImage("res/img/img.jpg");
}
-
AWT(Abstract Window Toolkit)는 Window 프로그래밍을 하기 위한 GUI의 도구이다.
-
Toolkit tk = Toolkit.getDefaultToolkit();
은 시스템의 Default Toolkit 객체로 리턴한다. -
img = tk.getImage("res/img/img.jpg");
로 저장된 경로에서 이미지를 불러온다.
@Override
public boolean mouseDown(Event evt, int x, int y) {
if(x>=0 && x<=200 && y>=0 && y<=200) {
dx=150;
dy=150;
repaint();
}
return true;
}
-
public boolean mouseDown(Event evt, int x, int y)
는 지정한 x,y의 위치를 클릭 시, 그 아래 코드를 동작하게 한다. -
repaint();
을 통해 다시 그림을 그린다.
2-4) 다양한 Graphics g 메소드
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
g.drawLine(10, 10, 100, 100);
// (10,10)에서 (100,100)으로 이어지는 직선
g.drawOval(100, 100, 150, 100);
// (100,100)을 왼쪽 위의 끝으로 하는 너비 150, 높이 100의 원
// 원의 안쪽을 채우고 싶으면 g.fillOval을 쓰면 된다.
g.drawImage(img,0,0,this);
//img를 (0,0)에 그린다.
g.drawImage(img,0,0,300,300,this);
//img를 (0,0)에 width 300, height 300으로 그린다.
g.drawImage(img, // img를
200,200,400,400, // 시점 (200,200) 종점을 (400,400)에 그리는데
200,0,400,200, // 시점 (200,0),종점 (400,200) 지점을 그린다.
this);
g.drawImage(img,
dx,dy,200,200+dy,
200,200,400,400,
this);
//이와같이 변수를 이용할 수도 있다.
//super.paint(g);
}
}
- Frame에 Canvas, Button, TestBox 등등...이 붙어있는 모양이다.
Author And Source
이 문제에 관하여([TIL] 다차원 배열, 시각화를 위한 그래픽 플랫폼), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@psh94/TIL-다차원-배열-시각화를-위한-그래픽-플랫폼저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)