mojo's Blog
마우스를 이용하여 선 그리기 본문
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();
}
}
'Java' 카테고리의 다른 글
명품 JAVA Programming 제 12장 실습문제 (3~4 제외) (0) | 2021.08.04 |
---|---|
명품 JAVA Programming 제 12장 Open Challenge (0) | 2021.08.04 |
이미지 그리기 / Clipping (0) | 2021.08.04 |
도형 그리기와 칠하기 (0) | 2021.08.04 |
JPanel을 상속받아 도형 그리기 / drawString() 메소드 이용 (0) | 2021.08.03 |
Comments