본문 바로가기
대학교/2.객체지향프로그래밍_JAVA

[JAVA] 이벤트 그래픽

by Jcoder 2017. 6. 3.

1.

(pp. 466) KeyPad를 클릭한 버튼의 숫자만 출력되도록 수정

 

1

2

3

4

5

@Override

public void actionPerformed(ActionEvent e) {

String actionCommand = e.getActionCommand();

txt.setText(txt.getText() + actionCommand);

}

Colored by Color Scripter

cs

1

2

3

4

5

@Override

public void actionPerformed(ActionEvent e) {

String actionCommand = e.getActionCommand();

txt.setText(actionCommand);

}

Colored by Color Scripter

cs

 

txt.getText()를 지우면 된다.

그림입니다.

원본 그림의 이름: CLP0000125836a3.bmp

원본 그림의 크기: 가로 316pixel, 세로 361pixel

(pp. 468) Puzzlereset 구현

1

2

3

4

5

6

7

8

9

10

11

reset = new MyButton("reset");

reset.setBackground(Color.red);

reset.setForeground(Color.yellow);

add(reset, BorderLayout.SOUTH);

reset.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

for(int i=0; i<8; i++)

buttons[i].setText(""+(i+1));

buttons[8].setText(" ");

}

});

Colored by Color Scripter

cs

 

 

그림입니다.

원본 그림의 이름: CLP000012580001.bmp

원본 그림의 크기: 가로 297pixel, 세로 297pixel 그림입니다.

원본 그림의 이름: CLP000012580002.bmp

원본 그림의 크기: 가로 298pixel, 세로 297pixel < reset 버튼 클릭 >

 

reset.addActionListener(new ActionListener() { //무명 클랙스 사용

public void actionPerformed(ActionEvent e) {

for(int i=0; i<8; i++)

buttons[i].setText(""+(i+1)); //버튼의 숫자를 바꿉니다.

buttons[8].setText(" "); //마지막버튼 공백으로 처리

}

});

(pp. 472) RockPaperScissorTextFeildJLabel로 바꾸기

private JLabel output;

private JLabel information;

private JButton rock;

private JButton paper;

private JButton scissor;

public RockPaperScissor() {

setTitle("가위, 바위, ");

setSize(400, 300);

setDefaultCloseOperation(EXIT_ON_CLOSE);

panel =new JPanel();

panel.setLayout(new GridLayout(0, 3));

information =new JLabel("아래의 버튼 중에서 하나를 클릭하시오!");

output =new JLabel(" ");

그림입니다.

원본 그림의 이름: CLP000012580003.bmp

원본 그림의 크기: 가로 397pixel, 세로 300pixel

 

(pp. 492) 화면에 사각형 그리기에서 사각형의 크기를 임의로 정해서 그리도록 수정 *난수 생성기 사용

@Override

publicvoid mousePressed(MouseEvent e)

{

Random random =newRandom();

if (index >100)

return;

array[index] =new Rectangle();

array[index].x = e.getX();

array[index].y = e.getY();

array[index].w = random.nextInt(200); //랜덤 함수 사용

array[index].h = random.nextInt(200); //랜덤 함수 사용

index++;

repaint();}

 

그림입니다.

원본 그림의 이름: CLP000012580004.bmp

원본 그림의 크기: 가로 502pixel, 세로 495pixel

그림입니다.

원본 그림의 이름: CLP000012580005.bmp

원본 그림의 크기: 가로 747pixel, 세로 619pixel 그림입니다.

원본 그림의 이름: CLP000012580006.bmp

원본 그림의 크기: 가로 499pixel, 세로 500pixel

 

 

 

그림입니다.

원본 그림의 이름: CLP000012580007.bmp

원본 그림의 크기: 가로 493pixel, 세로 491pixel

 

 

 

 

 

 

 

publicvoid paintComponent(Graphics g) {

super.paintComponent(g);

Random random =newRandom();

int computer = random.nextInt(3);

g.setColor(color);

for (Rectangle r : array)

if (r !=null)

if(computer ==0)

{

g.drawRect(r.x, r.y, r.w, r.h);

}

elseif (computer ==1)

{

g.drawOval(r.x, r.y, r.w, r.h);

}

else

{

g.drawLine(r.x, r.y, random.nextInt(200), random.nextInt(200));

}

}

@Override

publicvoid mousePressed(MouseEvent e) {

Random random =newRandom();

if (index >100)

return;

array[index] =new Rectangle();

array[index].x = e.getX();

array[index].y = e.getY();

array[index].w = random.nextInt(200);

array[index].h = random.nextInt(200);

index++;

color =new Color((int) (Math.random() *255.0),

(int) (Math.random() *255.0), (int) (Math.random() *255.0));

repaint();

}

랜덤함수를 써 도형과 색을 바꾸게 했습니다.

(pp. 522) SnowManFace에 버튼을 추가하고 이 버튼이 눌리면 찡그린 얼굴로 변경되도록 소스를 수정

class MyPanel2 extends JPanel { //패널을 생성

publicvoid paintComponent(Graphics g) {

super.paintComponent(g);

g.setColor(Color.RED);

g.fillOval(25, 30, 200, 200);

g.setColor(Color.BLACK);

g.drawArc(60, 80, 50, 50, -180, 180); // 왼쪽 눈

g.drawArc(150, 80, 50, 50, -180, 180); // 오른쪽 눈

g.drawArc(75, 130, 100, 70, 180, -180); //

} //찡그린 얼굴

}

publicclass SnowManFace extends JFrame implementsActionListener{ // 상속

JButton button;

public SnowManFace() {

setSize(280, 350);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setTitle("눈사람 얼굴");

add(new MyPanel());

button =new JButton("색상 변경"); //버튼 추가

add(button, BorderLayout.SOUTH);

button.addActionListener(this); //액션리스너 추가

setVisible(true);

}

publicvoid actionPerformed(ActionEvent e) {

add(new MyPanel2()); //패널 2를 실행

setVisible(true);

그림입니다.

원본 그림의 이름: CLP000017d43b71.bmp

원본 그림의 크기: 가로 276pixel, 세로 348pixel 그림입니다.

원본 그림의 이름: CLP000017d40002.bmp

원본 그림의 크기: 가로 278pixel, 세로 346pixel }

(pp. 542) GrayScaleImage에서 색상 성분의 평균값(22라인 avg)이 정해진 값(threshold라 하자) 보다 작으면 avg=0으로 수정 한 후 결과를 설명하기

* threshold = 100, 150, 200 등으로 바꾸어가며 실행한 결과를 분석

 

int threshold =200; // 150 // 100

if(avg < threshold)

{

avg =0;

Color newColor =new Color(avg, avg, avg);

image.setRGB(r, c, newColor.getRGB());

}

else

{

Color newColor =new Color(avg, avg, avg);

image.setRGB(r, c, newColor.getRGB());

}

그림입니다.

원본 그림의 이름: 100.JPG

원본 그림의 크기: 가로 525pixel, 세로 547pixel

그림입니다.

원본 그림의 이름: 150.JPG

원본 그림의 크기: 가로 527pixel, 세로 551pixel

그림입니다.

원본 그림의 이름: 200.JPG

원본 그림의 크기: 가로 492pixel, 세로 520pixel

100

150

200

 

각 높이 너비의 픽셀의 평균값이 threshold보다 작으면 avg들은 (0,0,0)이 되기 때문에 회색에서 검정색으로 변합니다.

0~255이기 때문에 > 100, > 150, > 200 이면 검정색으로 바뀝니다.

 

OOP.이벤트.그래픽.zip