본문 바로가기
Programming Study/절대JAVA

[절대JAVA]10장 프로그래밍 연습문제(2)

by 푸고배 2018. 10. 3.

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

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

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

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

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

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

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

 

 

<소스코드> Chapter10_5.java

 

package Chapter10_5;

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 Chapter10_5 extends JFrame implements MouseInputListener{
	JLabel label;
	public Chapter10_5(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
		Chapter10_5 c = new Chapter10_5("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
		
	}

}

 

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

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

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

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

<소스코드> Chapter10_6.java

package Chapter10_6;

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

import javax.swing.JFrame;


public class Chapter10_6 extends JFrame implements MouseMotionListener{

	private static final long serialVersionUID = 1L;
	Point p = new Point(0,0); //
	public Chapter10_6(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
		Chapter10_6 c = new Chapter10_6("마우스를 누르고 글씨를 써 보세요.");
	}
	@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;
		}
		
	}
}

 

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

- 메뉴를 다음과 같이 구성

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

 

<소스코드> Chapter10_7.java

package Chapter10_7;

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 Chapter10_7 extends JFrame implements ActionListener{
	
	public Chapter10_7(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
		Chapter10_7 c = new Chapter10_7("메뉴처리");
	}
	@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;
		}
	}

}

참고자료 : 인피니티북스 절대 JAVA

github 주소 : 

https://github.com/ch1517/Network-programming/tree/master/Chapter10

반응형

댓글