IT/자바

익명클래스 설명

Beautifulkim 2018. 5. 9. 17:37

MyMain_Anonymous.java

MyMain_Anonymous2.java

MyMain_Anonymous3.java

MyMain_LocalInner.java

MyMain_MemberInner.java

MyMain_MemberInner2.java


package mymain;

import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;

// awt -> 확장 -> swing
// Frame		  JFrame
public class MyMain_MemberInner extends JFrame {

	//멤버로써의 내부클래스
	// WindowListener : 윈도우 이벤트 처리 객체
	class MyWindowLisner implements WindowListener 
	{

		@Override
		public void windowOpened(WindowEvent e) {
			// TODO 자동 생성된 메소드 스텁
			
		}

		@Override
		public void windowClosing(WindowEvent e) {
			// TODO 자동 생성된 메소드 스텁
			System.exit(0);
		}

		@Override
		public void windowClosed(WindowEvent e) {
			// TODO 자동 생성된 메소드 스텁
			
		}

		@Override
		public void windowIconified(WindowEvent e) {
			// TODO 자동 생성된 메소드 스텁
			
		}

		@Override
		public void windowDeiconified(WindowEvent e) {
			// TODO 자동 생성된 메소드 스텁
			
		}

		@Override
		public void windowActivated(WindowEvent e) {
			// TODO 자동 생성된 메소드 스텁
			
		}

		@Override
		public void windowDeactivated(WindowEvent e) {
			// TODO 자동 생성된 메소드 스텁
			
		}
		
	}
//------------------------------------------------------내부클래스 영역	
	public MyMain_MemberInner() {
		super("내가만든 윈도우");

		//위치
		//this.setLocation(200, 100);
		//크기지정
		//this.setSize(400,  300);

		//위치 + 크기정보
		this.setBounds(200, 100, 400, 300);

		//보여줘라
		this.setVisible(true);

		//종료코드
		//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.addWindowListener(new MyWindowLisner());
	}

	public static void main(String[] args) {
		new MyMain_MemberInner();
	}
}
package mymain;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;

// awt -> 확장 -> swing
// Frame		  JFrame
public class MyMain_MemberInner2 extends JFrame {
	
	//윈도우 이벤트 처리객체
	class MyWindowAdapter extends WindowAdapter 
	{
		@Override
		public void windowClosing(WindowEvent e) {
			// TODO 자동 생성된 메소드 스텁
			super.windowClosing(e);
		}
	}
	
	public MyMain_MemberInner2() {
		super("내가만든 윈도우");

		//위치
		//this.setLocation(200, 100);
		//크기지정
		//this.setSize(400,  300);

		//위치 + 크기정보
		this.setBounds(200, 100, 400, 300);

		//보여줘라
		this.setVisible(true);

		//종료코드
		//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//this.addWindowListener(new MyWindowAdapter()); 아래 코드는 풀어 놓은 것

		WindowListener listener = new MyWindowAdapter();
		this.addWindowListener(listener);
	}

	public static void main(String[] args) {
		new MyMain_MemberInner2();
	}
}
package mymain;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;

// awt -> 확장 -> swing
// Frame		  JFrame
public class MyMain_LocalInner extends JFrame {

	public MyMain_LocalInner() {
		super("내가만든 윈도우");

		//위치 + 크기정보
		this.setBounds(200, 100, 400, 300);

		//보여줘라
		this.setVisible(true);

		//종료코드
		//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//이벤트처리객체 선언
		class MyWindowAdapter extends WindowAdapter
		{
			@Override
			public void windowClosing(WindowEvent e) {
				//super.windowClosing(e);
				System.exit(0);
			}
		}
		this.addWindowListener(new MyWindowAdapter());
	}

	public static void main(String[] args) {
		new MyMain_LocalInner();
	}
}


/*
	추상 클래스, 인터페이스 : 객체생성 못하게 설계됨
	
	이벤트 처리 인터페이스
	XxxListener 

	해당인터페이스를 미리 재정의해놓은 추상클래스
	(객체생성을 못하게끔 설계해놓은 것 : 추상클래스)
	XxxAdapter
*/
package mymain;


import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;

// awt -> 확장 -> swing
// Frame		  JFrame

//원칙적인 방법
interface TestInter 
{
	void sub();
}

class MyTestInterImpl implements TestInter
{
	@Override
	public void sub() {
		// TODO 자동 생성된 메소드 스텁
	}
}


public class MyMain_Anonymous extends JFrame {
	
	public MyMain_Anonymous() {
		super("내가만든 윈도우");

		
		//인터페이스 익명클래스(객체생성과 동시에 재정의한 무명클래스)
		TestInter inter = new TestInter() {
			@Override
			public void sub() {
				// TODO 자동 생성된 메소드 스텁
				
			}
		};
		
		
		//위치
		//this.setLocation(200, 100);
		//크기지정
		//this.setSize(400,  300);

		//위치 + 크기정보
		this.setBounds(200, 100, 400, 300);

		//보여줘라
		this.setVisible(true);

		//종료코드
		//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		/*
		class MyWindowAdapter extends WindowAdapter
		{
			@Override
			public void windowClosing(WindowEvent e) {
				//super.windowClosing(e);
				System.exit(0);
			}
		}
		this.addWindowListener(new MyWindowAdapter());
		*/
		/*
		 	추상 클래스와 인터페이스는 객체생성을 못하지만
			재정의를 하면 객체생성을 할 수 있음.
		*/
		/*
			new WindowAdapter() {
			
			};
		*/ 
		//익명클래스이면서 내부 클래스인 익명내부클래스
/*		WindowListener listener = new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		}; 
		
		this.addWindowListener(listener);
*/
		
		this.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		
		// 지저분한 방법 Start
		WindowListener listener = new WindowListener() {
			@Override
			public void windowOpened(WindowEvent e) {}
			@Override
			public void windowIconified(WindowEvent e) {}
			@Override
			public void windowDeiconified(WindowEvent e) {}
			@Override
			public void windowDeactivated(WindowEvent e) {}
			@Override
			public void windowClosing(WindowEvent e) {}
			@Override
			public void windowClosed(WindowEvent e) {}
			@Override
			public void windowActivated(WindowEvent e) {}
		};
		// 지저분한 방법 End
	}

	public static void main(String[] args) {
		new MyMain_Anonymous();
	}
}


/*
 this.addWindowListener(new WindowAdapter() {
   @Override
   public void windowClosing(WindowEvent e)
   {
      // TODO   자동 생성된   메소드 스텁
      System.exit(0);
   }
});
 */




package mymain;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

//JPanel : border가 없는 그냥 판만 있는 것 (JFrame위에 올린것)
class GamePan extends JPanel
{
	Font font = new Font("굴림체", Font.BOLD, 30);
	//paintComponent : 게임판에 그리는 목적
	@Override
	protected void paintComponent(Graphics g) {
		// TODO 자동 생성된 메소드 스텁
		//super.paintComponent(g);
		g.setFont(font);
		g.drawString("오늘은 여기까지...", 50, 50);
		
		g.setColor(Color.RED);
		g.drawString("오늘은 여기까지...", 50-1, 50-2);
		
	}
}

public class MyMain_Anonymous2 extends JFrame {

	JPanel gamePan;
	public MyMain_Anonymous2() {
		super("내가만든 윈도우");

		gamePan=new GamePan();
		this.add(gamePan,"Center");
		
		//위치
		//this.setLocation(200, 100);
		//크기지정
		//this.setSize(400,  300);

		//위치 + 크기정보
		this.setBounds(200, 100, 400, 300);

		//보여줘라
		this.setVisible(true);

		//종료코드
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public static void main(String[] args) {
		new MyMain_Anonymous2();
	}
}
package mymain;

import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

// awt -> 확장 -> swing
// Frame		  JFrame
public class MyMain_Anonymous3 extends JFrame {
	
	JPanel gamePan;
	
	public MyMain_Anonymous3() {
		super("내가만든 윈도우");

		//아래것과 똑같은 개념
		//class Game extends JPanel{}
		
		//게임판 중앙에 넣는다.
		//1회성
		//객체생성과 동시에 재정의하면 익명클래스가 된다
		gamePan = new JPanel() {
			@Override
			protected void paintComponent(Graphics g) {
				g.drawString("정말 끝", 10, 50);
				
			}
		};
		
		this.add(gamePan);

		/*
			 gamePan = new JPanel() 
		    {
		        @Override
		        protected void paintComponent(Graphics g)
		        {
		            //super.paintComponent(g);
		            Font font= new Font("굴림체",Font.BOLD,18);
		            g.setFont(font);
		            g.drawString("오늘은 여기까지", 50, 200);
		            g.setColor(Color.red);
		            g.drawString("오늘은 여기까지", 50-2, 200);
		        }
		    };
		    this.add(gamePan,"Center");
		 */
		
		//위치 + 크기정보
		this.setBounds(200, 100, 400, 300);

		//보여줘라
		this.setVisible(true);

		//종료코드
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public static void main(String[] args) {
		new MyMain_Anonymous3();
	}
}