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
반응형
'Programming Study > 절대JAVA' 카테고리의 다른 글
[절대JAVA]11장 프로그래밍 연습문제(2) (0) | 2018.10.05 |
---|---|
[절대JAVA]11장 프로그래밍 연습문제(1) (0) | 2018.10.04 |
[절대JAVA]10장 프로그래밍 연습문제(1) (0) | 2018.10.01 |
[절대JAVA]9장 프로그래밍 연습문제(2) (0) | 2018.09.29 |
[절대JAVA]9장 프로그래밍 연습문제(1) (0) | 2018.09.28 |
댓글