카테고리 없음
ActionEvent를 이용하여 순환하는 색상 패널들 만들기
오늘의 진
2022. 8. 5. 15:03
(개요)
색상 버튼을 만들고 색상 버튼을 누르면 아래와 같이 출력되도록 프로그램 만들기
이전 위치의 색상 | 현재색상 | 다음 위치의 색상 |
package Test;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//색상패드 만들기 - 핸들러 방식
public class ColTest_1 extends Frame {
Panel btp, slide, p1, p2, p3;
Button[] bt = new Button[8];
Color[] color = { Color.red, Color.orange, Color.yellow, Color.green, Color.magenta, Color.cyan, Color.gray,
new Color(215, 188, 242) };
String[] str = { "Red", "Orange", "Yellow", "Green", "Magenta", "Cyan", "Gray", "Puple", };
public ColTest_1() {
super("색상 테스트");
btp = new Panel();
slide = new Panel();
p1 = new Panel();
p2 = new Panel();
p3 = new Panel();
// 버튼 상세조정
for (int i = 0; i < bt.length; i++) {
bt[i] = new Button(str[i]);
bt[i].setForeground(color[i]);
btp.add(bt[i]);
// 이벤트 달기
bt[i].addActionListener(new Handeler());
}
// 패널들의 위치 조정
slide.setLayout(new GridLayout(1, 3));
slide.add(p1);
slide.add(p2);
slide.add(p3);
add("North", btp);
add("Center", slide);
setSize(300, 300);
setVisible(true);
}
public static void main(String[] args) {
new ColTest_1();
}
// 이벤트 처리를 위한 구문 작성
class Handeler implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
Button obj = (Button) e.getSource();
for (int i = 0; i < bt.length; i++) {
if (obj == bt[i]) {
p1.setBackground(color[(i + 7) % 8]);// 앞
p2.setBackground(color[i]); // 현재
p3.setBackground(color[(i + 1) % 8]); // 뒤
}
}
}
}
}
(설명)
버튼을 붙일 패널 1개 , 색상패널3개, 색상패널들을 담을 행렬형태의 패널 1개 생성
색깔을 돌리는 방법 : 색상이 총 8개이므로 현재 색이 나올 공간에는 color[i]를 준다.
그 다음 색이 나올 공간은 i+1번째 색이 나올 공간인데 색상이 총 8개이므로 i=8 이되면 오류가 발생
이를 8로 나눈 나머지를 구하면 1이다. 첫번째로 돌아감 이를 이용한다.
8개가 반복되는 순환 구조임을 이용하여 8로 나눈 나머지를 이용한다.
(순환소수에서 i번째 수를 구하는 것과 같은맥락)
12345678 / 12345678 / 12345678 반복
마찬가지로 i번째 수 이전에 나올 것은 i-2가 아니라 i+7의 8로 나눈 나머지를 구해준다.