mojo's Blog

마우스를 이용하여 선 그리기 본문

Java

마우스를 이용하여 선 그리기

_mojo_ 2021. 8. 4. 00:50

repaint() : 이 함수는 Component 클래스의 메소드로 자바 플랫폼에게 컴포넌트에 변화가 일어났으니 강제로 페인팅할 것을 지시하는 메소드이다.

 

revalidate() : 컨테이너의 배치관리자에게 자식 컴포넌트의 배치를 다시 하도록 지시하는 메소드이다. 컨테이너에 컴포넌트를 새로 삽입하거나 삭제하여 컨테이너가 출력된 모양에 변화가 생겼다면 revalidate()를 호출하여 컨테이너를 다시 그리도록 해야 한다.

 

마우스를 이용하여 선 그리는 코드 (repaint() 사용 꼭 하기)

import javax.swing.*; // JFrame
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import java.awt.*; // Container
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Vector;
import java.awt.*;

public class GraphicsDrawLineMouseEx extends JFrame{
	
	private MyPanel panel = new MyPanel();
	
	public GraphicsDrawLineMouseEx() {
		setTitle("12장 연습");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setContentPane(panel);
		
		setSize(350, 500); // 프레임 크기 300x300
		setVisible(true); // 프레임 출력
	}
	
	class MyPanel extends JPanel{
		
		private Vector<Point> vStart = new Vector<Point>();
		private Vector<Point> vEnd = new Vector<Point>();
		
		public MyPanel() {
			addMouseListener(new MouseAdapter() {
				public void mousePressed(MouseEvent e) {
					Point startP = e.getPoint();
					vStart.add(startP);
				}
				
				public void mouseReleased(MouseEvent e) {
					Point endP = e.getPoint();
					vEnd.add(endP);
					
					repaint(); // 패널의 다시 그리기를 요청한다! 
				}
			});
		}
		
		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.setColor(Color.BLUE);
			
			for(int i=0; i<vStart.size();i++) {
				Point s = vStart.get(i);
				Point e = vEnd.get(i);
				
				g.drawLine((int)s.getX(), (int)s.getY(), (int)e.getX(), (int)e.getY());
			}
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new GraphicsDrawLineMouseEx();
	}

}

 

JButton 을 상속받아 새로운 버튼을 생성하기

import javax.swing.*; // JFrame
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import java.awt.*; // Container
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Vector;
import java.awt.*;

public class paintComponentEx extends JFrame{
	
	public paintComponentEx() {
		setTitle("12장 연습");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container c = getContentPane();
		c.setLayout(new FlowLayout());
		MyButton b = new MyButton("New Button");
		b.setOpaque(true); b.setBackground(Color.CYAN);
		c.add(b);
		setSize(350, 500); // 프레임 크기 300x300
		setVisible(true); // 프레임 출력
	}
	
	class MyButton extends JButton{
		public MyButton(String s) {
			super(s);
		}
		
		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.setColor(Color.RED);
			g.drawOval(0, 0, this.getWidth()-1, this.getHeight()-1);
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new paintComponentEx();
	}

}

Comments