만자의 개발일지

[Java/Swing] 스케치 기능 구현하기 본문

Java/Swing

[Java/Swing] 스케치 기능 구현하기

박만자 2021. 3. 18. 14:52

과제를 하던 중에 서명 기능을 구현하라는 부분이 있었다. 처음에 어쩔줄 몰라서 막 찾아보고 따라 쳤는데 아무리해도 내가 생가한대로 나오지 않았다. 

Point 클래스를 담고 있는 이중 ArrayList를 사용해서도 해보고 다양하게 시도해봤지만 원하는 결과가 나오지 않았고 한다 한들 코드가 너무 엉망진창이었다.

 

몇시간을 고민한 후에 간신히 해결하였다.

사실 생각보다 간단한 문제였다.

 

import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class SketchFrame extends JFrame {
	
	public SketchFrame() {
		setTitle("Painter");
		setSize(250,300);
		setLayout(null);
		
		JPanel signPanel = new JPanel();   // 스케치할 패널 생성
		signPanel.setBackground(Color.white); // 배경은 하얀색
		signPanel.addMouseMotionListener(new MouseMotionAdapter() { // 이부분 중요!!
			@Override      // MouseMotionAdapter 클래스의 mouseDragged 메소드 오버라이딩
			public void mouseDragged(MouseEvent e) {  // 마우스를 누르고 드래그할때마다 이벤트 발생
				signPanel.getGraphics().fillOval(e.getX(), e.getY(), 8, 8); //JPanel 클래스에 getGraphics 메소드로 Graphics 객체 반환
			}				//Graphics 클래스의 fillOval(x,y,width,height) 메소드(채워진 원 그려주는 메소드)를 이용하여
							//MouseEvent 클래스의 e.getX,e.getY 메소드로 드래그할때마다 좌표반환하고 원그려주기       
		});
		signPanel.setBounds(0,0,250,220);
		
		JButton btn = new JButton("확인");
		btn.addActionListener(e->{  //버튼 눌렀을때 메시지창 띄워주고 패널 초기화
			JOptionPane.showMessageDialog(null, "서명되었습니다.","메시지",JOptionPane.INFORMATION_MESSAGE);
			signPanel.repaint();
		});
		btn.setBounds(100,230,60,30);
		
		add(signPanel); //프레임에 추가
		add(btn);
		setVisible(true);
		setLocationRelativeTo(null); //프레임 가운데로 띄워주기
		setDefaultCloseOperation(EXIT_ON_CLOSE); //오른쪽위에 X 버튼 눌렀을때 프로그램 종료
		
	}
	
	public static void main(String[] args) {
		new SketchFrame();
	}

}

 

 

몇줄 안되는 코드로 쉽게 구현할 수 있었다.😎

Comments