JAVA 프로그래밍

문제

버튼을 누르면 자동으로 문이 열리는 과정을 모델링하는 문제입니다 이를 해결하는 다음 프로그램을 해석하세요 
 

알고리즘

 프로그램 시작 
   프레임에 자동문 패널을 끼우고 실행 준비 완료
프레임의 X 버튼 누르면 프로그램 종료

자동문 클래스
   자동문 초기화
      먼저, 자동문은 닫힌 상태로 초기화
      클릭하면 반응하는 버튼을 자동문에 부착
   버튼 클릭시 반응
      자동문이 닫혀 있으면 열기
      자동문이 열려 있으면 닫기


  클래스 다이어그램
 
  시퀀스 다이어그램

 
 

프로그램 코드

E001	// 이벤트 대기중
E002	// 문열기 버튼 클릭하기
E003	// 문닫기 버튼 클릭하기
	 
	// 파일명 : ./Chapter13/AutomaticDoorGUIMain.java
	import javax.swing.*;
	  
	public class AutomaticDoorGUIMain
	{
		// 프로그램 시작  
1		public static void main( String[] args ) {
			// 프레임에 자동문 패널을 끼우고 실행 준비 완료 
			JFrame frame = new JFrame( "자동문" );
2			frame.getContentPane().add( new AutomaticDoorPanel() );
			frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
			frame.pack();
			frame.setVisible(true);
3		}
		// 프레임의 X 버튼 누르면 프로그램 종료 
	}
	 
	// 파일명 : ./Chapter13/AutomaticDoorPanel.java
	import java.awt.*;
	import java.awt.event.*;
	import javax.swing.*;
	 
	// 자동문 클래스 
	public class AutomaticDoorPanel extends JPanel
	{
		private JPanel door;
		private JButton button;
		private boolean open;
	 
		// 자동문 초기화 
Pb		public AutomaticDoorPanel() {
			// 먼저, 자동문은 닫힌 상태로 초기화 
			door = this;
			open = false;
			setBackground( Color.cyan );
			setPreferredSize( new Dimension( 250, 400 ) );
			 
			// 클릭하면 반응하는 버튼을 자동문에 부착   
			button = new JButton( "문열기" );
			button.addActionListener( new ClickListener() );
			add( button );
Pe		}
	 
		// 버튼 클릭시 반응 
		private class ClickListener implements ActionListener {
			@Override
Lb			public void actionPerformed( ActionEvent event ) {
				// 자동문이 닫혀 있으면 열기 
L1				if ( open == false ) {
					open = true;
					door.setBackground( Color.white );
L2					button.setText( "문닫기" );
				}
				// 자동문이 열려 있으면 닫기 
L3				else {
					open = false;
					door.setBackground( Color.cyan );
L4					button.setText( "문열기" );
				}
Le			}
		}
	}

실행 순서

 
 					※ 실행순서 및 메모리상태는 A키(이전) 및 D키(다음)를 눌러도 확인할 수 있습니다