자바

[자바] Youtub Tutorial 게임을 만들면서 정리한 점 ( 주석 및 정리 )

j9972 2022. 9. 19. 14:33
728x90

간력적인 정리

JFrame

java swing class의 일부이며, 구현되는 하나의 창이다.

Swing

자바에서 GUI( 그래픽 사용자 인터페이스 )를 구현하기 위해 제공되며 버튼, 창, 표 등의 컴포넌트들을 이용할 수 있게 해주는 클래스다.

 

예시코드

import javax.swing.*;

public class TestJFrame extends JFrame {
    public test() {
        setTitle("");
        setSize(width, height); // 창 사이즈
        setVisible(true);
    }
    
    public static void main(String[] args) {
        new testJFrame(); // Frame의 생성자를 호출해야한다. 
    }
}

 

Panel

frame과 동일하게 컴포넌트를 붙이지만, 다른점은 패널을 만들어서 패널에 컴포넌트를 붙이고 그 패널을 프레임에 붙인다는 점이다.

결국 컴포넌트가 탑재되어서 프레임에 붙는다는 것이다.

-> 프레임에 붙기에 프레임보다 사이즈가 크거나 프레임영역 밖으로 나갈 수 없다.

 

 

예시코드

import java.awt.*;
public class test {
    public static void main(String[] args) {
        Frame f = new Frame();
        Panel p = new Panel();
        
        // 프레임과 패널을 세팅 및 레이아웃 설정
        f.setTitle("");
        f.setBounds(200,200,200,200);
        f.setVisible(true);
        f.setLayout(null);
        
        p.setBounds(100,100,100,100);
        p.setlayout(null);
        
        // 컴포넌트 설정
        Button btn = new Button("");
        
        // 패널에 컴포넌트 붙이기
        p.add(btn);
        
        // 프레임에 패널 붙이기 
        f.add(p);
    }
}

Event

KeyEvent

keyPressed( KeyEvent e ) { }
// 키를 눌렀을 경우에 호출

keyReleased( KeyEvent e ) { }
// 키에서 손을 떼는 경우에 호출

keyTyped( KeyEvent e ) { }
// 글자를 입력하는 경우에 호출

 

MouseEvent

mouseClicked( MouseEvent e ) { } 
// 마우스 클릭하는 경우 호출

mouseEntered( MouseEvent e ) { } 
// 마우스가 컴포넌트 영역안으로 들어가면 호출

mouseExited( MouseEvent e ) { } 
// 마우스가 컴포넌트 영역밖으로 나가면 호출

mousePressed( MouseEvent e ) { } 
// 마우스가 컴포넌트 위에서 눌려지면 호출

mouseReleased( MouseEvent e ) { } 
// 마우스가 컴포넌트 위에서 떼어지면 호출

mouseDragged( MouseEvent e ) { } 
// 마우스 버튼을 누른채로 이동

mouseMoved( MouseEvent e ) { } 
// 마우스 버튼을 누르지 않은 채로 이동

 

Graphics

그래픽 메소드에 쓰인다

java.awt.*; 에 포함되어 있다

 

1.  선,사각형,원 등을 그리는 메소드의 집합
2.  내부를 채우는 fill, 내부를 채우지 않는 draw
3.  좌표 구조는 오른쪽 아래방향으로 값이 증가하는 형태이다

 

예시코드

public void draw(Graphics g) {
    g.setColor(Color.red);
}

 

Random

일정 범위 안에 아무 값, 난수를 생성할때 사용한다

 

사용 방법

1. Random 클래스 사용

1. import java.util.*; 필요
2. Random 클래스 객체 필요
3. int, double, boolean 등 타입에 따라서 객체.next타입( ) 이렇게 사용

 

예시코드

import java.util.*;

public class Random() {
    public static void main(String[] ags) {
        Random random = new Random(); 
    
        System.out.println(random.nextInt());
        // nextInt(10) 이면, 0 ~ 9 사이의 난수, 없으면 int 범위의 난수
        System.out.println(random.nextDouble());
        System.out.println(random.nextBoolean());
    }
}

 

2. Math 사용

예시 코드

int randomValue;

randomValue = (int)( Math.random() * 100 + 1 );
// 변수 = (타입)( Math.random() * 최댓값 + 증감값 );

 

SetFont 메소드

폰트 객체 생성

// Font 폰트객체명 = new Font(적용사항)
Font font = new Font("글자체", "효과", "글자 크기"); 

// 폰트 적용 ( Graphics g ) 를 사용
g.setFont("글자체", "효과", "글자 크기");

 

효과

1. Font.BLOD -> 글자를 굵게함

2. Font.ITALIC -> 글자를 대각선으로 눕힘

3. Font.PLAIN -> 글자를 일반 글자

 

setSize, setPreferredSize 

 

사용 방법

setSize( new Dimension(x,y) )

setPreferredSize( new Dimension(x,y) )

 

비교

둘다 해당 컴포넌트의 크기를 결정을 할때 사용한다

하지만, setPreferredSize는 layout 지정할 때 사용한다

 

 

쓰레드 (thread)

프로그램 실행시 위에서 아래로 순차적으로 실행 되는 흐름을 하나의 스레드라고 표현

 

쓰레드를 사용하는 이유

 

run( ) 안에 코드를 작성해서 병렬처리 하는 방법

// 이 클래스를 실행하기 위해, 객체 생성 후 start( ) 메소드 호출 필수\
public class testThread {
    public void run() {
         // .. 병렬처리 할 코드 구현
    }
}

class thread extends implements Runnable {
    public static void main(String[] args) {
        thread th = new thread();
        th.start();
    }
}

 

여러 쓰레드 기동

class thread extends implements Runnable {
    public static void main(String[] args) {
        thread th1 = new thread();
        th1.start();
        
        thread th2 = new thread();
        th2.start();
    }
}

 

쓰레드 일시정지 및 다른 스레드 종료후 실행

일시 정지를 위해서는 try-catch 문으로 묶어주기

class test implements Runnable {
    public void run() {
        // 병렬 처리
        
        try {
            sleep(1000); // 1초 대기
       	} catch ( Exception e ) {
            e.printStackTrace();
        }
   }
}

sleep은 무한루프를 통한 cpu 이슈를 막기위해 필수적이다.

 

 

다른 스레드 종료후 실행은 join( ) 메소드 사용하기

public class testThread {
    public static void main(String[] args) {
        thread th = new thread();
        th.start();
        
        thread th2 = new thread();
        
        try {
            th.join();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        th2.start();
    }
}

Toolkit

각종 컴포넌트와 특정 네이티브인 툴킷의 구현을 묶기 위함.
즉, 컴포넌트 상태를 설정한 후에 상태를 조회하면, 요구된 변경이 값으로 해서 돌려주지 않는다.