Java JComboBox

2023. 2. 3. 11:42Java

프로젝트 내 src 내 javabasic 패키지 내 Ex2CanvasCombo.java

package javabasic;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Ex2CanvasCombo extends JFrame implements ActionListener {

	String[] title = { "선", "원", "사각형", "이미지", "문자열" };
	JComboBox<String> combo;
	SelectDraw draw;// 내부클래스 그림그리는 내부클래스
	int idx = 4;// 초기값은 문자열
	String imageName = "C:\\java0901\\image\\귀여운 아이콘\\c7.png";
	Image image;
	Color fcolor;
	int x, y;

	public Ex2CanvasCombo(String title) {
		// TODO Auto-generated constructor stub
		super(title);
		this.setBounds(700, 100, 400, 500);// 시작위치x,y,크기 w,h
		// super로 해도 되고 this로 해도 됨 super는 조상
		// this로 해도 상속을 받아서 괜찮음
		// this.getContentPane().setBackground(Color.orange);//프레임위에 있는 패널의 색상 변경
		this.getContentPane().setBackground(new Color(211, 225, 208));// 프레임위에 있는 패널의 색상 변경
		this.setDesign();// 디자인 코드
		this.setVisible(true);// 보이게 하기
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 프로그램을 종료해주는 메서드
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		// 선택한 인덱스를 멤버변수 idx에 저장
		idx = combo.getSelectedIndex();
		// 캔바스의 paint 메서드 호출
		draw.repaint();
	}

	// 랜덤한 색상과 위치를 구해주는 메서드
	public void changeColorAndPosition() {
		int r = (int) (Math.random() * 256);// 0~255
		int gr = (int) (Math.random() * 256);// 0~255
		int b = (int) (Math.random() * 256);// 0~255
		// 위치도 랜덤하게
		x = (int) (Math.random() * 300);// 0~299, 멤버변수
		y = (int) (Math.random() * 300) + 50;// 50~349, 멤버변수

		fcolor = new Color(r, gr, b);
	}

	// 캔버스 내부 클래스
	class SelectDraw extends Canvas {
		@Override
		public void paint(Graphics g) {
			// TODO Auto-generated method stub
			super.paint(g);

			switch (idx) {
			case 0:// 선
				for (int i = 1; i <= 30; i = i + 1) {
					changeColorAndPosition();
					g.setColor(fcolor);// 선색 변경
					g.drawLine(x, y, x + 200, y);
				}
				break;
			case 1:// 원
				for (int i = 1; i <= 30; i = i + 1) {
					changeColorAndPosition();
					g.setColor(fcolor);// 원채우기색상 변경
					g.fillOval(x, y, 50, 50);
				}
				break;
			case 2:// 사각형
				for (int i = 1; i <= 30; i = i + 1) {
					changeColorAndPosition();
					g.setColor(fcolor);// 사각형채우기색상 변경
					g.fillRect(x, y, 50, 50);
				}
				break;
			case 3:// 이미지
				image = new ImageIcon(imageName).getImage();
				for (int i = 1; i <= 5; i = i + 1) {
					changeColorAndPosition();
					g.drawImage(image, x, y, 150, 100, this);
				}
				break;
			case 4:// 문자열
			{
				changeColorAndPosition();// 랜덤하게 색상및 위치구하기
				g.setColor(fcolor);// 글자색 변경
				g.setFont(new Font("Comic Sans MS", Font.BOLD, 22));// 글꼴 변경
				g.drawString("Happy Day", x, y);// 캔바스에 문자열 출력
				break;
			}
			}
		}
	}

	public void setDesign() {
		this.setLayout(null);
		JLabel lbl = new JLabel("Select ComboBox");
		lbl.setBounds(10, 10, 150, 30);
		this.add(lbl);

		combo = new JComboBox<String>(title);
		combo.setSelectedIndex(idx);// 초기값 선택
		combo.setBounds(180, 10, 100, 30);
		this.add(combo);
		combo.addActionListener(this);// 이벤트

		// 캔바스 추가
		draw = new SelectDraw();
		draw.setBounds(0, 80, 400, 400);
		this.add(draw);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Ex2CanvasCombo("그래픽 선택");
		// System.out.println((int)(Math.random()*10));
		// System.out.println((int)(Math.random()*9));
		// System.out.println((int)(Math.random()*11));
		// System.out.println((int)(Math.random()*12));
		// System.out.println((int)(Math.random()*8));
		// System.out.println((int)(Math.random()*20));
	}

}

 

'Java' 카테고리의 다른 글

Java DefaultTableModel  (0) 2023.02.03
Java JTable  (1) 2023.02.03
Java Choice  (0) 2023.02.03
Java JTextField  (1) 2023.02.02
Java getContentPane()  (0) 2023.02.02