Java

Java setDefaultCloseOperation(int operation)

승모근뭉치 2023. 2. 2. 01:47

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

package javabasic;

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

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JRadioButton;
//문제:5개의 라디오버튼(배열) 을 선택할때마다 이미지 변경하기
//이미지는 자기 마음대로....(Ex3을 약간 수정해서 하세요)

public class Ex5RadioImage extends JFrame {

//	String imageName1="C:\\java0901\\image\\연예인사진\\1.JPG";
//	String imageName2="C:\\java0901\\image\\연예인사진\\2.JPG";
//	String imageName3="C:\\java0901\\image\\연예인사진\\3.JPG";
//	String imageName4="C:\\java0901\\image\\연예인사진\\4.JPG";
//	String imageName5="C:\\java0901\\image\\연예인사진\\5.JPG";
//	
//	Image image;
//	JRadioButton rb[]=new JRadioButton[5];
//	String []RbTitle= {"image1","image2","image3","image4","image5"};
//	
	
	JRadioButton []rb=new JRadioButton[5];
	DrawImage draw=new DrawImage();
	String []title= {"김태희","딸기","산토리니","이나영","하지원"};
	
	String imageName1="C:\\java0901\\image\\연예인사진\\31.JPG";
	String imageName2="C:\\java0901\\image\\연예인사진\\4.JPG";
	String imageName3="C:\\java0901\\image\\연예인사진\\26.JPG";
	String imageName4="C:\\java0901\\image\\연예인사진\\23.JPG";
	String imageName5="C:\\java0901\\image\\연예인사진\\24.JPG";
	
	Image image;
	
	public Ex5RadioImage(String title) {
		// TODO Auto-generated constructor stub
		super(title);
		this.setBounds(700, 100, 500, 600);//시작위치x,y,크기 w,h
		//super로 해도 되고 this로 해도 됨 super는 조상
		//this로 해도 상속을 받아서 괜찮음
		//this.getContentPane().setBackground(Color.orange);//프레임위에 있는 패널의 색상 변경
//		this.getContentPane().setBackground(new Color(211,225,208));//프레임위에 있는 패널의 색상 변경
		this.getContentPane().setBackground(Color.white);//프레임위에 있는 패널의 색상 변경
		this.setDesign();//디자인 코드
		this.setVisible(true);//보이게 하기
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//프로그램을 종료해주는 메서드
	}
	
//	이미지를 그리기 위한 내부클래스
	class DrawImage extends Canvas
	{
		@Override
		public void paint(Graphics g) {
			// TODO Auto-generated method stub
			super.paint(g);
			g.drawImage(image, 60, 30, 300, 400, this);
		}
	}
	
	public void setDesign()
	{
//		int xPos=30;
//		ButtonGroup bg1=new ButtonGroup();
//		for(int i=0;i<rb.length;i=i+1)
//		{
//			rb[i]=new JRadioButton(RbTitle[i], i==1?true:false);
//			rb[i].setBounds(xPos, 30, 80, 30);
//			rb[i].addActionListener(new RadioClick());
//			this.add(rb[i]);
//			bg1.add(rb[i]);
//			
//			
//		}
		
		this.setLayout(null);
//		라디오버튼
		ButtonGroup bg=new ButtonGroup();
		int xPos=20;
		for(int i=0;i<rb.length;i=i+1)
		{
			rb[i]=new JRadioButton(title[i], i==2?true:false);
			rb[i].setBounds(xPos, 30, 80, 30);
			rb[i].setOpaque(false);
			this.add(rb[i]);
			bg.add(rb[i]);
			xPos=xPos+80;
			final int idx=i;
			
//			익명내부클래스로 이벤트
			rb[i].addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent arg0) {
					// TODO Auto-generated method stub
//					i번째 이미지 생성
					switch (idx) {
					case 0:
						image=new ImageIcon(imageName1).getImage();
						break;
					case 1:
						image=new ImageIcon(imageName2).getImage();
						break;
					case 2:
						image=new ImageIcon(imageName3).getImage();
						break;
					case 3:
						image=new ImageIcon(imageName4).getImage();
						break;
					case 4:
						image=new ImageIcon(imageName5).getImage();
						break;
					
					}
					//캔바스 paint 호출
					draw.repaint();
				}
			});
		}
		
//		DrawImage 추가
//		초기 이미지-산토리니
		image=new ImageIcon(imageName3).getImage();
		draw.setBounds(0, 100, 500, 500);
		this.add(draw);
		
	}
	
//	class RadioClick implements ActionListener
//	{
//		@Override
//		public void actionPerformed(ActionEvent e) {
//			// TODO Auto-generated method stub
//			
//		}
//	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Ex5RadioImage("이미지선택");
	}

}

setDefaultCloseOperation(int operation) 메서드는

이 프레임에서 사용자가 "close" 를 시작할 때 기본적으로 일어날 동작을 설정한다.

개발자는 반드시 다음의 선택지 중에 하나를 구체화해야만 한다:

 

  • DO_NOTHING_ON_CLOSE (WindowConstants 에 정의됨): 아무것도 하지 않음; 프로그램에게 등록된 WindowListener 객체의 windowClosing 메서드 내에서 작업을 다루기를 요구한다. 
  • HIDE_ON_CLOSE (WindowConstants 에 정의됨): 아무 등록된 WindowListener 객체들을 호출한 뒤에 자동적으로 그 프레임을 숨긴다.
  • DISPOSE_ON_CLOSE (WindowConstants 에 정의됨): 어떤 등록된 WindowListener 객체들을 호출한 후 자동으로 그 프레임을 숨기고 정리한다. 
  • EXIT_ON_CLOSE (JFrame 에 정의됨): System exit 함수를 써서 application 을 빠져나간다. 이 정수값은 오로지 application 종류에서만 사용하자.