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
'Programming Study > 명품자바프로그래밍' 카테고리의 다른 글
[명품자바프로그래밍] 10장 Open Challenge (0) | 2018.10.04 |
---|---|
[명품자바프로그래밍] 10장 실습문제(2) (0) | 2018.10.04 |
[명품자바프로그래밍] 9장 Open Challenge (0) | 2018.10.03 |
[명품자바프로그래밍] 9장 실습문제 (0) | 2018.09.30 |
[명품자바프로그래밍] 8장 Open Challenge (3) | 2018.09.29 |
댓글