1. 다음 조건을 만족하며 클래스 JFrame을 상속받는 클래스를 구현하여 테스트하는 프로그램을 작성하시오.
- 윈도우의 하단에 색상을 표현하는 버튼 2개 추가
- 버튼을 누르면 윈도우 바탕을 선택한 버튼의 색상으로 수정
- 윈도우의 캡션 제목은 "버튼 액션 이벤트 처리"
<소스코드> Chapter10_1.java
package Chapter10_1;
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 Chapter10_1 extends JFrame implements ActionListener{
JButton yellowBtn;
JButton redBtn;
JPanel p1; // 색이 바뀌는Panel
JPanel p2; // 버튼이 들어가는 Panel
//생성자
public Chapter10_1(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
Chapter10_1 c = new Chapter10_1("버튼 액션 이벤트 처리");
}
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);
}
}
}
2. 다음 조건을 만족하며 클래스 JFrame을 상속받는 클래스를 구현하여 테스트하는 프로그램을 작성하시오.
- 버튼을 다음과 같이 5개로 구성
- 색상을 지정하면 윈도우 제목에 색상이 표시
- [pentagon] 버튼을 누르면 지정한 색상으로 오각형을 그리기
<소스코드> Chapter10_2.java
package Chapter10_2;
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 Chapter10_2 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 Chapter10_2(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) {
// TODO Auto-generated method stub
Chapter10_2 c = new Chapter10_2("Chapter10_2");
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
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;
}
}
}
}
3. 마우스 이벤트를 처리하여 다음 조건을 만족하는 윈도우를 구현하여 테스트하는 프로그램을 작성하시오.
- 마우스를 누른 지점에서 드래그 후 놓은 지점까지 직선을 그리기
- 현재의 윈도우에서는 이전에 그린 직선도 계속 보이도록 구현
- 윈도우 내부에서 MouseAdapter를 상속받는 클래스를 구현하여 이벤트 처리
<소스코드> Chapter10_3.java
package Chapter10_3;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
public class Chapter10_3 extends JFrame {
Point p1 = new Point(0,0); // 시작점
Point p2 = new Point(0,0);; // 끝점
public Chapter10_3(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
Chapter10_3 c = new Chapter10_3("마우스를 누르고 이동한 후 놓아 보세요.");
}
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();
}
}
}
4. 마우스 이벤트를 처리하여 다음 조건을 만족하는 윈도우를 구현하여 테스트하는 프로그램을 작성하시오.
- 처음 실행 화면
- 마우스를 누르면 윈도우 제목에 시작점 : (x좌표, y좌표)가 표시
- 마우스를 드래그하면 계속 중간점 : (x좌표, y좌표)이 표시되면서 직선이 그려짐
- 마우스를 놓으면 끝점 : (x좌표, y좌표)이 표시되면서 직선이 그려짐
- 마우스를 누르면 이전 직선은 없어지고 새로운 직선이 그려지도록 구현
<소스코드> Chapter10_4.java
package Chapter10_4;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.event.MouseInputListener;
public class Chapter10_4 extends JFrame implements MouseInputListener{
private static final long serialVersionUID = 1L;
Point p1 = new Point(0,0); // 시작점
Point p2 = new Point(0,0);; // 끝점
public Chapter10_4(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
Chapter10_4 c = new Chapter10_4("마우스를 누르고 이동한 후 놓아 보세요.");
}
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
}
}
참고자료 : 인피니티북스 절대 JAVA
github 주소 :
https://github.com/ch1517/Network-programming/tree/master/Chapter10
'Programming Study > 절대JAVA' 카테고리의 다른 글
[절대JAVA]11장 프로그래밍 연습문제(1) (0) | 2018.10.04 |
---|---|
[절대JAVA]10장 프로그래밍 연습문제(2) (0) | 2018.10.03 |
[절대JAVA]9장 프로그래밍 연습문제(2) (0) | 2018.09.29 |
[절대JAVA]9장 프로그래밍 연습문제(1) (0) | 2018.09.28 |
[절대JAVA]8장 프로그래밍 연습문제(2) (0) | 2018.09.27 |
댓글