본문 바로가기
Programming Study/명품자바프로그래밍

[명품자바프로그래밍] 10장 실습문제(1)

by 푸고배 2018. 10. 4.

1. JLavel 컴포넌트는 Mouse 이벤트를 받을 수 있다. JLabel 컴포넌트에 마우스를 올리면 "Love Java"가, 내리면 "사랑해"가 출력되도록 스윙 응용프로그램을 작성하라.

<소스코드>

package Chapter10;

import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;

//JLabel 컴포넌트는 Mouse 이벤트를 받을 수 있다. JLabel 컴포넌트에 마우스를 올리면
//"Love Java"가, 내리면 "사랑해"가 출력되도록 스윙 응용프로그램을 작성하라.
public class Chapter10_1 extends JFrame{

	Chapter10_1(){
		setTitle("마우스 올리기 내리기 예제"); // 제목 지정
		setLayout(new FlowLayout());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 닫기 버튼을 눌렀을 시 화면 닫기
		
		JLabel label = new JLabel("Love Java");
		
		// Jabel 컴포넌트 생성 후 MouseListener를 단다.
		label.addMouseListener(new MyMouseAdapter());
		
		label.setSize(200,50);
		add(label);
		setSize(400,200);
		setVisible(true);
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Chapter10_1();
	}

}
// MouseAdapter를 상속 받는 MyMouseAdapter 클래스
class MyMouseAdapter extends MouseAdapter{
	public void mouseEntered(MouseEvent e) {
		// 마우스가 label 컴포넌트 위에 올라왔을 때
		JLabel l = (JLabel)e.getSource();
		l.setText("사랑해");
	}
	public void mouseExited(MouseEvent e) {
		// 컴포넌트 위에 올라온 마우스가 컴포넌ㄴ트를 벗어났을 때
		JLabel l = (JLabel)e.getSource();
		l.setText("Love Java");
	}
}

 

2. 컨텐트팬의 배경색은 초록색으로 하고 마우스를 드래깅하는 동안만 노란색으로 유지하는 스윙 응용프로그램을 작성하라.

<소스코드>

package Chapter10;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

//컨텐트팬의 배경색은 초록색으로 하고 마우스를 드래깅하는 동안만 노란색으로 유지하는 스윙 응용 프로그램을 작성하라.
public class Chapter10_2 extends JFrame{
	JPanel contentPane = new JPanel(); // 컨텐트팬으로 사용할 패널
	Chapter10_2(){
		setTitle("드래깅동안 YELLO"); // 제목 지정
		setLayout(new FlowLayout());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 닫기 버튼을 눌렀을 시 화면 닫기
		
		setContentPane(contentPane);
		contentPane.setBackground(Color.GREEN);
		// JPanel에 MouseMotionListener 추가
		contentPane.addMouseMotionListener(new MyMouseMotionAdapter());
		// JPanel에 MouseListener 추가
		contentPane.addMouseListener(new MyMouseAdapter2());
		setSize(400,200);
		setVisible(true);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Chapter10_2();
	}
	//MouseMotionAdapter를 상속 받는 MyMouseMotionAdapter 클래스
	class MyMouseMotionAdapter extends MouseMotionAdapter{
		public void mouseDragged(MouseEvent e) {
			// 마우스가 드래그되는 동안
			contentPane.setBackground(Color.YELLOW);
		}
	}
	//MouseAdapter를 상속 받는 MyMouseAdapter2 클래스
	class MyMouseAdapter2 extends MouseAdapter{
		public void mouseReleased(MouseEvent e) {
			// 눌러진 마우스 버튼이 떼어질 때
			contentPane.setBackground(Color.GREEN);
		}
	}
}

 

 

3. JLabel을 활용하여 "Love Java"를 출력하고 왼쪽 화살표 키 (<Left> 키)를 입력할 때마다 "avaJ evoL"와 "Love Java"를 번갈아 출력하는 스윙 프로그램을 작성하라. StringBuffer 클래스의 reverse() 메소드를 이용하여 구현하는 것과 JLabel에 포커스를 설정하는 것을 잊지 말아야 한다.

<소스코드>

package Chapter10;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.*;

// JLabel을 활용하여 "Love Java"를 출력하고 왼쪽 화살표 키 (<Left> 키)를 입력할 때 마다
// "avaJ evoL"와 "Love Java"를 번갈아 출력하는 스윙 프로그램을 작성하라.
// StringBuffer 클래스의 reverse() 메소드를 이용하여 구현하는 것과 JLavel에 포커스를 설정하는 것을 잊지 말아야 한다.

public class Chapter10_3 extends JFrame{
	JLabel label; 
	// "Love Java"를 거꾸로 출력하기 위해 StringBuffer 생성
	StringBuffer s = new StringBuffer("Love Java");
	Chapter10_3(){
		setTitle("Left 키로 문자열 바꾸기 예제"); // 제목 지정
		setLayout(new FlowLayout());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 닫기 버튼을 눌렀을 시 화면 닫기
		
		label= new JLabel("Love Java");
		
		// Jabel 컴포넌트 생성 후 KeyListener를 단다.
		label.addKeyListener(new MyKeyAdapter());
		
		label.setSize(200,50);
		add(label);
		setSize(400,200);
		setVisible(true);
		label.requestFocus();
		// 컨텐트팬이 키 입력을 받을 수 있도록 포커스 강제 지정
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Chapter10_3();
	}
	class MyKeyAdapter extends KeyAdapter{
		public void keyPressed(KeyEvent e) {
			switch(e.getKeyCode()) { // 입력받은 코드가
				case KeyEvent.VK_LEFT: //<Left> 키 일때
					if(label.getText().equals("Love Java")) { // "Love Java"일 때
						label.setText(s.reverse().toString()); 
						// s.reverse()를 하면 따로 변수에 담지 않아도 s 자체가 바뀜
					}
					else {
						label.setText(s.reverse().toString());
					}
					break;
				default:
					break;
			}
		}
	}

}

 

 

4. JLabel을 활용하여 "Love Java"를 출력하고 왼쪽 화살표 키(<Left> 키)를 입력할 때마다 "ove JavaL", "ve JavaLo", "e JavaLov" 등과 같이 계속 한 문자씩 왼쪽으로 이동하는 스윙 프로그램을 작성하라. 문자열의 이동은 String 클래스의 substring()메소드를 이용하여 구현하라. String text = "Love Java"인 경우, text.substring(0, 1)은 "L"을 리턴하고, text.substring(1)은 "ove Java"를 리턴한다. JLabel에 포커스 설정하는 것을 잊지 말아야 한다.

<소스코드>

package Chapter10;

import java.awt.FlowLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;


//JLabel을 활용하여 "Love Java"를 출력하고 왼쪽 화살표 키(<Left>키)를 입력할 때마다
//"ove JavaL", "ve JavaLo", "e JavaLov" 등과 같이 계속 한 문자씩 왼쪽으로 이동하는 스윙 프로그램을 작성하라.
//문자열의 이동은 String 클래스의 substring() 메소드를 이용하여 구현하라.
//String text = "Love Java"인 경우, text.substring(0,1)은 "L"을 리턴하고, text.substring(1)은
//"ove Java"를 리턴한다. JLavel에 포커스 설정하는 것을 잊지 말아야한다.
public class Chapter10_4 extends JFrame{

	JLabel label; 
	String text = "Love Java";
	Chapter10_4(){
		setTitle("Left 키로 문자열 바꾸기 예제"); // 제목 지정
		setLayout(new FlowLayout());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 닫기 버튼을 눌렀을 시 화면 닫기
		
		label= new JLabel("Love Java");
		
		// Jabel 컴포넌트 생성 후 KeyListener를 단다.
		label.addKeyListener(new MyKeyAdapter());
		
		label.setSize(200,50);
		add(label);
		setSize(400,200);
		setVisible(true);
		label.requestFocus();
		// 컨텐트팬이 키 입력을 받을 수 있도록 포커스 강제 지정
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Chapter10_4();
	}
	class MyKeyAdapter extends KeyAdapter{
		public void keyPressed(KeyEvent e) {
			switch(e.getKeyCode()) { // 입력받은 코드가
				case KeyEvent.VK_LEFT: //<Left> 키 일때
					label.setText(text); // text 한칸씩 앞으로 당김
					text = text.substring(1)+text.substring(0, 1);
					break;
				default:
					break;
			}
		}
	}

}

참고자료 : 생능출판 명품 JAVA Programming

github 주소 : 

https://github.com/ch1517/Masterwork-JAVA-Programming/tree/master/Chapter10

반응형

댓글