개발/Java / / 2022. 4. 3.

절대JAVA Chapter10 이벤트 처리와 그래픽 프로그래밍, 프로그래밍 연습

728x90
반응형

1. 다음 조건을 만족하며 클래스 JFrame을 상속받는 클래스를 구현하여 테스트하는 프로그램을 작성하시오.

- 윈도우의 하단에 색상을 표현하는 버튼 2개 추가

- 버튼을 누르면 윈도우 바탕을 선택한 버튼의 색상으로 수정

- 윈도우의 캡션 제목은 "버튼 액션 이벤트 처리"

 

 

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class one extends JFrame implements ActionListener{
	JButton yellowBtn;
	JButton redBtn;
	JPanel p1; // 색이 바뀌는Panel
	JPanel p2; // 버튼이 들어가는 Panel
	//생성자
	public one(String title) {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300, 200);
		setTitle(title);
		
		ButtonAction();
		setVisible(true);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		one c = new one("버튼 액션 이벤트 처리");
	}

	void ButtonAction() {
		yellowBtn = new JButton("노랑");
		redBtn = new JButton("빨강");
		p1 = new JPanel();
		p2 = new JPanel();
		
		p2.setLayout(new GridLayout(0, 2));
		p2.add(yellowBtn);
		p2.add(redBtn);
		add(p1, BorderLayout.CENTER);
		add(p2, BorderLayout.SOUTH);
		
		yellowBtn.addActionListener(this);
		redBtn.addActionListener(this);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String btnStr = e.getActionCommand();
		if(btnStr.equals("노랑")) {
			p1.setBackground(Color.YELLOW);
		}else {
			p1.setBackground(Color.RED);
		}
	}

}

https://github.com/sjpark2710/Java-Practice/blob/cc2b496a61286831e27ce643dd83cdeee73ee38f/Chapter10/src/one.java

 

GitHub - sjpark2710/Java-Practice: 절대자바 연습

절대자바 연습. Contribute to sjpark2710/Java-Practice development by creating an account on GitHub.

github.com

 

2. 다음 조건을 만족하며 클래스 JFrame을 상속받는 클래스를 구현하여 테스트하는 프로그램을 작성하시오.

- 버튼을 다음과 같이 5개로 구성

- 색상을 지정하면 윈도우 제목에 색상이 표시

- [pentagon] 버튼을 누르면 지정한 색상으로 오각형을 그리기

 

 

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.Polygon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;

public class Two extends JFrame implements ActionListener{
	
	Panel btnPanel;		//버튼이 들어가는 panel
	 int x[] = {130, 180, 230, 205, 155};
	 int y[] = {180, 140, 180, 230, 230};
	 
	 Button pentagonBtn;
	 Button redBtn;
	 Button yellowBtn;
	 Button blueBtn;
	 Button blackBtn;
	 
	 Color color;
	 
	 //생성자
	 public Two(String title) {
		 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		 setSize(500, 300);
		 setVisible(true);
		 drawPentagon();
	 }
	 
	 public void drawPentagon() {
		 btnPanel = new Panel();
		 pentagonBtn = new Button("pentagon");
		 redBtn = new Button("red");
		 yellowBtn = new Button("yellow");
		 blueBtn = new Button("blue");
		 blackBtn = new Button("black");
		 
		 color = Color.black;
		 
		 btnPanel.setLayout(new FlowLayout());
		 btnPanel.add(pentagonBtn);
		 btnPanel.add(redBtn);
		 btnPanel.add(yellowBtn);
		 btnPanel.add(blueBtn);
		 btnPanel.add(blackBtn);
		 
		 add(btnPanel, BorderLayout.NORTH);
		 
		 //버튼에 액선 리스너 추가
		 pentagonBtn.addActionListener(this);
		 redBtn.addActionListener(this);
		 yellowBtn.addActionListener(this);
		 blueBtn.addActionListener(this);
		 blackBtn.addActionListener(this);
		 
	 }
	 public void paint(Graphics g) {
		 g.setColor(color);
		 g.fillPolygon(new Polygon(x, y, 5));
	 }
	 
	 public static void main(String[]args) {
		 Two t = new Two("문제 2번");
	 }
	 
	 public void actionPerformed(ActionEvent e) {
		 
		 String strBtn = e.getActionCommand();
		 if(strBtn.equals("pentagon")) {
			 repaint();
		 }else {
			 setTitle(strBtn);
			 switch(strBtn) {
			 case "red" :
				 color = Color.red;
				 break;
			 case "yellow" :
				 color = Color.yellow;
				 break;
			 case "blue" :
				 color = Color.blue;
				 break;
			 case "black" :
				 color = Color.black;
				 break;
			default : 
				break;
			 
			 }
		 }
		 
		 
	 }
	 

}

 

https://github.com/sjpark2710/Java-Practice/blob/a64bce1e513209bec5f47e492056de849d154a8b/Chapter10/src/Two.java

 

GitHub - sjpark2710/Java-Practice: 절대자바 연습

절대자바 연습. Contribute to sjpark2710/Java-Practice development by creating an account on GitHub.

github.com

 

3. 마우스 이벤트를 처리하여 다음 조건을 만족하는 윈도우를 구현하여 테스트하는 프로그램을 작성하시오.

- 마우스를 누른 지점에서 드래그 후 놓은 지점까지 직선을 그리기

- 현재의 윈도우에서는 이전에 그린 직선도 계속 보이도록 구현

- 윈도우 내부에서 MouseAdapter를 상속받는 클래스를 구현하여 이벤트 처리

 

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;


public class Three extends JFrame {
	Point p1 = new Point(0,0); // 시작점
	Point p2 = new Point(0,0);; // 끝점
	
	public Three(String title) {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(500, 200);
		setTitle(title);
		addMouseListener(new Mouse()); // 모션리스너 등록
		setVisible(true);
	}
	@Override
	public void paint(Graphics g) {
		g.setColor(Color.magenta);
		g.drawLine(p1.x, p1.y, p2.x, p2.y);
	}
	@Override
	public void update(Graphics g) {
		paint(g);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Three c = new Three("마우스를 누르고 이동한 후 놓아 보세요.");
	}
	class Point{ // int값 x, y를 가지는 클래스 
		int x;
		int y ;
		Point(int x, int y){
			this.x = x;
			this.y = y;
		}
		
	}
	class Mouse extends MouseAdapter{
		public void mousePressed(MouseEvent e) { // 드래그 시작
			p1 = new Point(e.getX(),e.getY()); // 시작 점 저장
		}
		public void mouseReleased(MouseEvent e) { // 드래그 끝
			p2 = new Point(e.getX(),e.getY()); // 끝 점 저장
			repaint();
		}
	}
}

https://github.com/sjpark2710/Java-Practice/blob/b271daa33f4e0f032240a14e3c8861ac9e224fa8/Chapter10/src/Three.java

 

GitHub - sjpark2710/Java-Practice: 절대자바 연습

절대자바 연습. Contribute to sjpark2710/Java-Practice development by creating an account on GitHub.

github.com

 

4. 마우스 이벤트를 처리하여 다음 조건을 만족하는 윈도우를 구현하여 테스트하는 프로그램을 작성하시오.

- 처음 실행 화면

- 마우스를 누르면 윈도우 제목에 시작점 : (x좌표, y좌표)가 표시

- 마우스를 드래그하면 계속 중간점 : (x좌표, y좌표)이 표시되면서 직선이 그려짐

- 마우스를 놓으면 끝점 : (x좌표, y좌표)이 표시되면서 직선이 그려짐

- 마우스를 누르면 이전 직선은 없어지고 새로운 직선이 그려지도록 구현

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.event.MouseInputListener;


public class Four extends JFrame implements MouseInputListener{
	private static final long serialVersionUID = 1L;
	Point p1 = new Point(0,0); // 시작점
	Point p2 = new Point(0,0);; // 끝점
	public Four(String title) {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(500, 200);
		setTitle(title);
		addMouseMotionListener(this); // 모션리스너 등록
		addMouseListener(this);
		setVisible(true);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Four c = new Four("마우스를 누르고 이동한 후 놓아 보세요.");
	}
	class Point{ // int값 x, y를 가지는 클래스 
		int x;
		int y ;
		Point(int x, int y){
			this.x = x;
			this.y = y;
		}
		
	}
	@Override
	public void paint(Graphics g) { 
		super.paint(g);
		g.setColor(Color.magenta);
		g.drawLine(p1.x, p1.y, p2.x, p2.y);
	}
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub

	}
	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		getGraphics().clearRect(0, 0, 500, 200); // 화면 초기화
		p1 = new Point(e.getX(),e.getY()); // 시작 점 저장
		setTitle("시작점 : ("+e.getX()+", "+e.getY()+")");
	}
	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		setTitle("끝점 : ("+e.getX()+", "+e.getY()+")");
	}
	@Override
	public void mouseDragged(MouseEvent e) {
		// TODO Auto-generated method stub
		setTitle("중간점 : ("+e.getX()+", "+e.getY()+")");
		p2 = new Point(e.getX(),e.getY()); // 중간 점 저장
		repaint();
	}
	@Override
	public void mouseMoved(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
}

https://github.com/sjpark2710/Java-Practice/blob/d337fd01c54b4f5594c65ea935a3a6052f17a9b9/Chapter10/src/Four.java

 

GitHub - sjpark2710/Java-Practice: 절대자바 연습

절대자바 연습. Contribute to sjpark2710/Java-Practice development by creating an account on GitHub.

github.com

5. 마우스 이벤트를 처리하여 다음 조건을 만족하는 윈도우를 구현하여 테스트하는 프로그램을 작성하시오.

- 처음 실행 화면 : No Mouse Event 표시

- 마우스가 윈도우에 들어오면 윈도우 색상이 청록색(Cyan)으로 수정

- 마우스가 윈도우 밖으로 나가면 윈도우 색상이 노란색으로 수정

- 마우스를 누르면 : MousePressed(x좌표, y좌표)가 표시

- 마우스를 드래그하면 : MouseDragged(x좌표, y좌표)가 표시

- 마우스를 놓으면 : MouseReleased(x좌표, y좌표)가 표시

 

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

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.event.MouseInputListener;


public class Five extends JFrame implements MouseInputListener{
	JLabel label;
	public Five(String title) {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(500, 200);
		setTitle(title);
		addMouseMotionListener(this); // 모션리스너 등록
		addMouseListener(this);
		label = new JLabel("No Mouse Event");
		label.setHorizontalAlignment(SwingConstants.CENTER);
		add(label, BorderLayout.NORTH);
		addMouseListener(this);
		addMouseMotionListener(this);
		
		setVisible(true);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Five c = new Five("MouseListener와 MouseMotionListener 예제");
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		getContentPane().setBackground(Color.CYAN);
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		getContentPane().setBackground(Color.YELLOW);
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		label.setText("mousePressed ("+e.getX()+","+e.getY()+")");
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		label.setText("mouseReleased ("+e.getX()+","+e.getY()+")");
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		// TODO Auto-generated method stub
		label.setText("mouseDragged ("+e.getX()+","+e.getY()+")");
	}

	@Override
	public void mouseMoved(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

}

https://github.com/sjpark2710/Java-Practice/blob/9675c0d4fb5f96ce3d34f5449f47ad36dff4bb8e/Chapter10/src/Five.java

 

GitHub - sjpark2710/Java-Practice: 절대자바 연습

절대자바 연습. Contribute to sjpark2710/Java-Practice development by creating an account on GitHub.

github.com

 

6. 마우스 이벤트를 처리하며 다음 조건을 만족하는 윈도우를 구현하여 테스트하는 프로그램을 작성하시오.

- 마우스를 누르고 드래그하면 드래그하는 부분에 "*"가 출력

* g.drawString("*", x, y);

- 다음과 같이 드래그하는 부분이 출력

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;


public class Six extends JFrame implements MouseMotionListener{

	private static final long serialVersionUID = 1L;
	Point p = new Point(0,0); //
	public Six(String title) {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(500, 200);
		setTitle(title);
		addMouseMotionListener(this);
		setVisible(true);
	}
	@Override
	public void paint(Graphics g) { 
		g.drawString("*", p.x, p.y);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Six c = new Six("마우스를 누르고 글씨를 써 보세요.");
	}
	@Override
	public void mouseDragged(MouseEvent e) {
		// TODO Auto-generated method stub
		p = new Point(e.getX(), e.getY());
		repaint();
	}
	@Override
	public void mouseMoved(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	class Point{ // int값 x, y를 가지는 클래스 
		int x;
		int y ;
		Point(int x, int y){
			this.x = x;
			this.y = y;
		}
		
	}
}

https://github.com/sjpark2710/Java-Practice/blob/f270eb76c30007d8973c0ded9abb64703f0a410a/Chapter10/src/Six.java

 

GitHub - sjpark2710/Java-Practice: 절대자바 연습

절대자바 연습. Contribute to sjpark2710/Java-Practice development by creating an account on GitHub.

github.com

7. 다음 조건을 만족하며 클래스 JFrame을 상속받는 클래스를 구현하여 테스트하는 프로그램을 작성하시오.

- 메뉴를 다음과 같이 구성

- JMenuItem인 색상을 선택하면 윈도우의 바탕이 선택한 색상으로 수정 

 

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.AbstractButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;


public class Seven extends JFrame implements ActionListener{
	
	public Seven(String title) {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(500, 200);
		setTitle(title);
		settingMenu();
		setVisible(true);
	}
	public void settingMenu() {

		JMenu mainMenu = new JMenu("주메뉴");
		JMenu subMenu = new JMenu("바탕색상");
		JMenuItem yellowItem = new JMenuItem("노랑");
		yellowItem.addActionListener(this);
		JMenuItem redItem = new JMenuItem("빨강");
		redItem.addActionListener(this);
		JMenuItem grayItem =new JMenuItem("회색");
		grayItem.addActionListener(this);
		
		subMenu.add(yellowItem);
		subMenu.add(redItem);
		subMenu.add(grayItem);
		
		mainMenu.add(subMenu);
		JMenuBar menubar = new JMenuBar();
		menubar.add(mainMenu);
		setJMenuBar(menubar);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Seven c = new Seven("메뉴처리");
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String str = e.getActionCommand();
		switch (str) {
		case "노랑":
			getContentPane().setBackground(Color.yellow);
			break;
		case "빨강":
			getContentPane().setBackground(Color.red);
			break;
		case "회색":
			getContentPane().setBackground(Color.gray);
			break;
		default:
			break;
		}
	}

}

https://github.com/sjpark2710/Java-Practice/blob/fd12f791763e0c52584937d7d4d0531bb7785c0f/Chapter10/src/Seven.java

 

GitHub - sjpark2710/Java-Practice: 절대자바 연습

절대자바 연습. Contribute to sjpark2710/Java-Practice development by creating an account on GitHub.

github.com

 

728x90
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유