Java 85(Paint)

Kang.__.Mingu·2024년 5월 20일
0

Java

목록 보기
87/108

Paint

  • Window.paint(Graphics g)

    • 컨테이너(JFrame, JWindow, JDialog 등)에 그림을 출력하는 메소드

    • 프로그램이 실행되어 컨테이너가 보여지는 경우 또는 아이콘에서 해제되어 컨테이너가 보여지는 부분, 컨테이너의 크기가 변경되는 경우 자동 호출되는 메소드

    • Graphics 객체

      • 컨테이너에 그림을 그리는 기능을 제공하는 객체
      • 컨테이너에 원하는 그림을 그리기 위해 Window 클래스의 paint() 메소드를 오버라이딩 선언
  • Window.repaint()

    • patin() 메소드를 수동으로 호출하는 메소드
    • paint() 메소드를 직접 호출할 수 없으므로 repaint() 호출하여 사용
  • g.setColor(Color.색)

    • Graphics 객체의 색을 변경하는 메소드
  • g.drawRect()

    • 사각형(선)을 그리는 메소드
  • g.fillRect()

    • 사각형(면)을 그리는 메소드
  • g.drawOval()

    • 타원(선)을 그리는 메소드
  • g.fillOval()

    • 타원(면)을 그리는 메소드
  • g.drawLine()

    • 선을 그리는 메소드
  • g.drawString()

    • 문자열을 그리는 메소드

마우스 관련 이벤트

  • MouseAdapter 추상클래스를 상속받은 익명의 클래스를 사용하여 객체를 생성해 전달
  • mouseClicked
    • 마우스 클릭시 발생하는 이벤트
  • MouseEvent.getX()
    • 마우스 버튼을 클릭한 X 좌표값을 반환하는 메소드
  • MouseEvent.getY()
    • 마우스 버튼을 클릭한 Y 좌표값을 반환하는 메소드

PaintApp

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

// 프레임에서 마우스 버튼을 클릭한 경우 클릭한 위치의 좌표값을 문자열로 출력하는 프로그램 작성
// => 마우스 관련 이벤트는 MouseEvent 클래스를 사용하여 표현
public class PaintApp extends JFrame {

    // 마우스 버튼을 클릭한 좌표값을 저장하기 위한 필드
    // => 이벤트 처리 메소드에서 좌표값을 제공받아 필드에 저장하고 paint() 메소드에서 필드값 출력
    private int x,y;

    public PaintApp(String title) {
        super(title);

        // JFrame 컨테이너에서 마우스 관련 이벤트가 발생될 경우 이벤트 처리를 위해 Listener 객체 등록
        // => MouseAdapter 추상클래스를 상속받은 익명의 클래스를 사용하여 객체를 생성해 전달
        addMouseListener(new MouseAdapter() {
            // 컴포넌트(컨테이너)에서 마우스 버튼을 누른 경우 자동 호출되는 이벤트 처리 메소드
            // => 이벤트 처리 메소드의 매개변수에서는 이벤트 관련 정보가 저장된 Event 객체를
            // 전달받아 이벤트 처리 메소드에서 사용 가능
            @Override
            public void mouseClicked(MouseEvent e) {
                // MouseEvent.getX(): 마우스 버튼을 클릭한 X 좌표값을 반환하는 메소드
                x = e.getX();
                // MouseEvent.getY(): 마우스 버튼을 클릭한 Y 좌표값을 반환하는 메소드
                y = e.getY();

                // Window.repaint(): patin() 메소드를 수동으로 호출하는 메소드
                // => paint() 메소드를 직접 호출할 수 없으므로 repaint() 호출하여 사용
                repaint();
            }
        });

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(800,200,300,400);
        setVisible(true);
    }

    public static void main(String[] args) {
        new PaintApp("Paint 메소드");
    }

    // Window.paint(Graphics g): 컨테이너(JFrame, JWindow, JDialog 등)에 그림을 출력하는 메소드
    // => 프로그램이 실행되어 컨테이너가 보여지는 경우 또는 아이콘에서 해제되어 컨테이너가 보여지는 부분,
    // 컨테이너의 크기가 변경되는 경우 자동 호출되는 메소드
    // => Graphics 객체: 컨테이너에 그림을 그리는 기능을 제공하는 객체
    // 컨테이너에 원하는 그림을 그리기 위해 Window 클래스의 paint() 메소드를 오버라이딩 선언
    @Override
    public void paint(Graphics g) {
        // System.out.println("paint(Graphics g) 호출");

        // super 키워드로 부모클래스의 숨겨진 메소드를 호출
        // => 부모클래스의 paint() 메소드를 호출하여 컨테이너 초기화 처리
        super.paint(g); // 부모클래스 가지고 초기화 할 경우 사용, 안하고 중복 가능하게 할거면 사용 안함
        /*
        // Graphic 객체로 메소드를 호출하여 다양한 형태의 그림 출력 가능
        g.setColor(Color.RED); // Graphics 객체의 색을 변경하는 메소드
        g.drawRect(20, 40, 50, 50); // 사각형(선)을 그리는 메소드
        g.fillRect(20, 100, 100, 50); // 사각형(면)을 그리는 메소드

        g.setColor(Color.GREEN); // Graphics 객체의 색을 변경하는 메소드
        g.drawOval(125,175, 50, 50); // 타원(선)을 그리는 메소드
        g.fillOval(100,250, 100, 50); // 타원(면)을 그리는 메소드


        g.setColor(Color.BLUE); // Graphics 객체의 색을 변경하는 메소드
        g.drawLine(100, 320, 200, 320); // 선을 그리는 메소드
        g.drawString("홍길동", 100, 350); // 문자열을 그리는 메소드
        */


        g.drawString("[" + x + ", " + y + "]",x,y);
    }
}
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글