Swing JInternal Frame

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class  MyMDIFrameDemo extends JFrame
{
	JButton open1, open2;
	JLabel lb;
	ImageIcon img, img2, img3;
	JInternalFrame child1, child2;
	//내부 프레임...프레임 안에 존재할 수 있는 프레임...Window 계열...

	public MyMDIFrameDemo(){
		super(":: MyMDIFrameDemo ::");
		Container cp=getContentPane();
		//컨텐트 페인에 내부 프레임을 붙일 예정...
		//그럴려면...좌표 잡아서 붙여야 함.
		//레이아웃 해제--null
		cp.setLayout(null);
		
		JPanel p1=new JPanel();
		
		p1.setBackground(Color.yellow);
		p1.setBounds(0,0, 700, 50);
		p1.add(open1=new JButton("Open Child1"));
		cp.add(p1);

		img=new ImageIcon("./img/img05.gif");
		img2=new ImageIcon("./img/img06.gif");
		img3=new ImageIcon("./img/img07.gif");

		child1=new JInternalFrame("child1",true, true, true, true);
											//resizable, closable,최대화, 최소화
		//내부 프레임--컨테이너..
		cp.add(child1);
		child1.setBounds(0,80,250,250);
		
		//내부프레임에 라벨 붙이기
		Container child1Con=child1.getContentPane();
		child1Con.add(lb=new JLabel(img));
		child1.setVisible(true);//내부 프레임도 프레임이기 때문에
									//반드시 setVisible(true)줘야 한다.

		//MyJInternalFrame객체 생성 및 부착
		child2=new MyJInternalFrame();
		cp.add(child2);
		child2.setBounds(300,300,250,250);
		child2.setVisible(true);

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}//생성자-------
	public static void main(String[] args) 
	{
		MyMDIFrameDemo d=new MyMDIFrameDemo();
		d.setSize(700,700);
		d.setVisible(true);
	}
}/////////////////////////////////
class MyJInternalFrame extends JInternalFrame
implements ActionListener, Runnable
{
	JButton bt;
	JProgressBar pb;
	JLabel res;
	int sum=0;

	public MyJInternalFrame(){
		super("child2",true,true,true);
		Container child2Con=getContentPane();
		child2Con.setLayout(new GridLayout(3,1, 10,10));
		
		pb=new JProgressBar(JProgressBar.HORIZONTAL,0,100);
		child2Con.add(pb);
		pb.setValue(100);
		pb.setStringPainted(true);

		bt=new JButton("진행");
		child2Con.add(bt);
		res=new JLabel("결과",JLabel.CENTER);
		child2Con.add(res);

		//리스너 부착
		bt.addActionListener(this);

	}//생성자----
	public void actionPerformed(ActionEvent e){
		Thread tr=new Thread(this);
		tr.start();
	}//---------------
	public void run(){
		//1~10까지 합산하면서...진행바 10%씩 감소...
		for(int i=0;i<=10;i++){
			sum+=i;
			//pb.setValue(100-(i*10));
			pb.setValue(pb.getValue()-10);
			try
			{
				Thread.sleep(100);
			}
			catch (Exception ex)
			{
				ex.printStackTrace();
			}
			res.setText("1부터 10의 합: "+sum);
			
		}//for------
		sum=0;
	}//---------------
}//////////////////////////////////
/*실습 문제
1] 진행버튼 누르면 1부터 10까지 합산된 결과가
    JLabel 문자열로 나오게 하자.
2] 아울러 프로그레스바가 처음에 100에 있다가
    합산이 진행될 수록 10%씩 줄어들도록 하자.
3] child2프레임이 사이즈 조정, 닫기, 최대화, 최소화가 되게끔

*/

'Java > Awt_Swing' 카테고리의 다른 글

RootPane  (0) 2011.12.06
GlassPane  (0) 2011.12.06
Swing JTable  (0) 2011.12.06
SWING JProgressBar, JSlider  (0) 2011.12.05
Swing Demo  (0) 2011.12.05

Swing JTable

////////////////////////////////////JTable활용------JTableDemo.java//////////////////////////////////////////////////////
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class  JTableDemo extends JFrame
{
	JTable table;//View -(Visual Component)
	Object data[][]={  //Model파트-data를 가지는 부분
{"홍길동", new Integer(1), new ImageIcon("./img/img01.gif"), new Boolean(true) },
{"김길동", new Integer(2), new ImageIcon("./img/img02.gif"), new Boolean(false) },
{"정길동", new Integer(3), new ImageIcon("./img/img03.gif"), new Boolean(true) },
{"강길동", new Integer(4), new ImageIcon("./img/img04.gif"), new Boolean(false) }
};
	String[] colNames={"이름","번호","캐릭터","사람인가?"};
	//Controller : 모델과 view부분을 연결하여 동작방식이나 이벤트 등등의
	//				   제어를 하는 부분.
	//					XXXRenderer...XXXEditor...

	public JTableDemo(){
		super(":: JTableDemo ::");
		Container cp=getContentPane();
		//table=new JTable(3,2);//3행2열 형태의 테이블
		//JTable(Object[][] rowData, Object[] columnNames) 
		table=new JTable(data, colNames);
		cp.add(new JScrollPane(table));

		addWindowListener(new WindowAdapter(){ 
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
	}//생성자-------
	public static void main(String[] args) 
	{
		JTableDemo d=new JTableDemo();
		d.setSize(500,500);
		d.setVisible(true);
	}
}////////////////////고유한 JTable의 모델 만들기---MyTableModel.java////////////////////////////////////////////////
import javax.swing.*;
import javax.swing.table.*;

public class  MyTableModel extends AbstractTableModel
{
	Object data[][]={  //Model파트-data를 가지는 부분
{"홍길동", new Integer(1), new ImageIcon("./img/img01.gif"), new Boolean(true) },
{"김길동", new Integer(2), new ImageIcon("./img/img02.gif"), new Boolean(false) },
{"정길동", new Integer(3), new ImageIcon("./img/img03.gif"), new Boolean(true) },
{"강길동", new Integer(4), new ImageIcon("./img/img04.gif"), new Boolean(false) }
};
	String[] colNames={"이름","번호","캐릭터","사람인가?"};

	//컬럼수를 리턴해줘야...오버라이딩 필수..
	public int getColumnCount(){
		return colNames.length;
	}
	//행의 수를 리턴해줘야...오버라이딩 필수
	public int getRowCount(){
		return data.length;
	}
	//각 행과 열의 해당되는 객체를 리턴...오버라이딩 필수
	public Object getValueAt(int row, int col){
			return data[row][col];
	}
	
	//필수는 아니지만 옵션인 메소드 오버라이딩
	//컬럼명을 반환하는 메소드
	public String getColumnName(int col){
		return colNames[col];
	}
	
	//옵션-각 컬럼의 클래스 객체를 리턴--
	public Class getColumnClass(int col){
		Object obj=getValueAt(0, col);
		Class cl=obj.getClass();
		return cl;
	}
	//옵션--각 셀이 편집 가능하게 해주려면 오버라이딩
	public boolean isCellEditable(int row, int col){
		boolean res=(col==1)? false: true;
			//번호는 편집 불가능하게 만들자. 나머지는 편집 가능
		return res;
	}
	//옵션--수정된 값을 적용시키려면 오버라이딩.
	public void setValueAt(Object v, int row, int col){
		String sval=v.toString();
		switch (col)
		{		
		case 0://1열 인 경우...String객체
			data[row][col]=sval;
			break;
		case 1://2열인 경우...Integer객체
			data[row][col]=new Integer(sval);
			break;
		case 2://3열인 경우...ImageIcon객체
			data[row][col]=new ImageIcon(sval);
			break;
		case 3://4열인 경우...Boolean
			data[row][col]=new Boolean(sval);
			break;		
		}

	}//-------------------



}/////////////////////////////



'Java > Awt_Swing' 카테고리의 다른 글

GlassPane  (0) 2011.12.06
Swing JInternal Frame  (0) 2011.12.06
SWING JProgressBar, JSlider  (0) 2011.12.05
Swing Demo  (0) 2011.12.05
AWT 이용 학사관리 프로그램  (0) 2011.12.05

SWING JProgressBar, JSlider

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;

public class  JProgressBarDemo extends JFrame
{
	JProgressBar pb;
	JSlider sl, sl2, sl3;
	JButton bt;
	JPanel p1,p2, centerP;
	Canvas can;
	int blue;

	public JProgressBarDemo(){
		super(":: JProgressBarDemo ::");
		Container cp=getContentPane();
		p1=new JPanel(new BorderLayout());
		cp.add(p1,"North");
		pb=new JProgressBar(0,200);
		p1.add(pb,"Center");
		bt=new JButton("진행");
		p1.add(bt,"East");

		pb.setStringPainted(true);
		//상태바에 퍼센티지가 표시됨.

		sl=new JSlider();
		cp.add(sl,"South");

		sl2=new JSlider(JSlider.VERTICAL,0,100, 20);
												//최소값, 최대값, 막대바 위치
		cp.add(sl2, "West");
		sl2.setMajorTickSpacing(10);//큰눈금을 10단위로..
		sl2.setMinorTickSpacing(5);//작은 눈금 5단위로...
		sl2.setPaintTicks(true);//눈금이 나타나도록 true값을 주자.
		sl2.setPaintLabels(true);//눈금 수치 나타나도록...

		//sl3를 동쪽에 붙이자. 최소값:0 최대값:255
		sl3=new JSlider(JSlider.VERTICAL,0,255, 50);
		cp.add(sl3,"East");
		sl3.setMajorTickSpacing(50);
		sl3.setMinorTickSpacing(25);
		sl3.setPaintTicks(true);
		sl3.setPaintLabels(true);
		
		//centerP패널을 중앙에 붙인다.
		centerP=new JPanel();
		cp.add(centerP,"Center");

		//Canvas 생성해서 centerP에 붙이자.
		can=new Canvas();
		centerP.add(can);
		//캔버스 생상을 new Color( 200, 80, 슬라이더값으로)
		can.setSize(200,200);
		can.setBackground(new Color(200,80,blue));
		//JSlider를 조정할 때 마다 값을 얻어야 함-->blue값
		//JSlider의 이벤트 처리

		MyHandler my=new MyHandler();
		bt.addActionListener(my);
		sl3.addChangeListener(my);

		addWindowListener(new WindowAdapter(){ 
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
	}//생성자-------


	class MyThread extends Thread
	{
		public void run(){
			for (int i=pb.getMinimum();i<=pb.getMaximum() ;i++ )
			{
				pb.setValue(pb.getMaximum()-i); //100%에서 줄어들면서
				try
				{
					Thread.sleep(100);//0.1초간
				}
				catch (InterruptedException e)
				{
					e.printStackTrace();
				}
			}//for-----
		}//run()-----------
	}///////////////
	class MyHandler implements ActionListener, ChangeListener
	{
		public void stateChanged(ChangeEvent e){
			Object o=e.getSource();
			if(o==sl3){
				blue=sl3.getValue();
				setTitle("blue: "+blue);
				can.setBackground(new Color(200,80,blue));
			}
		}//----------------------
		public void actionPerformed(ActionEvent e){
			Object o=e.getSource();
			if(o==bt){
				///스레드 동작...
				MyThread tr=new MyThread();
				tr.start();
			}
		}
	}///////////////////

	public static void main(String[] args) 
	{
		JProgressBarDemo d=new JProgressBarDemo();
		d.setSize(500,500);
		d.setVisible(true);
	}
}


'Java > Awt_Swing' 카테고리의 다른 글

Swing JInternal Frame  (0) 2011.12.06
Swing JTable  (0) 2011.12.06
Swing Demo  (0) 2011.12.05
AWT 이용 학사관리 프로그램  (0) 2011.12.05
AWT Applet에 이미지 오디오 파일 띄우기  (0) 2011.12.02

Swing Demo

\Java\jdk1.7.0\demo\plugin\jfc\SwingSet2\SwingSet2.html


'Java > Awt_Swing' 카테고리의 다른 글

Swing JTable  (0) 2011.12.06
SWING JProgressBar, JSlider  (0) 2011.12.05
AWT 이용 학사관리 프로그램  (0) 2011.12.05
AWT Applet에 이미지 오디오 파일 띄우기  (0) 2011.12.02
AWT 멀티 프레임 연동  (1) 2011.12.02

AWT 이용 학사관리 프로그램

///////////////////////////////////////////Person.java//////////////////////////////////
package my.school;
import static java.lang.System.out;
//5.0버전 이상에서 사용가
import java.util.Scanner;
//5.0버전 이상에서 사용가

public abstract class Person {
	
	
	private String name;
	private String addr;
	
	public Person() {
		super();
	}//기본생성자----
	
	public Person(String name, String addr) {
		super();
		this.name = name;
		this.addr = addr;
	}//인자생성자--------

	//**setter,getter-----*/
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	//**추상메소드  */
	public abstract void setId(String id);
	public abstract String getId();
	
	//**사람 정보를 입력받는 모듈*/
	public void inputInfo()
	throws NotSupportedNameException{
		out.println("이름을 입력하세요=>");
		Scanner sc=new Scanner(System.in);
		String nm=sc.nextLine();
		if(nm.startsWith("콩")){
			throw new NotSupportedNameException("콩씨는 절대로 등록할 수 없어요");
		}else if(nm.startsWith("퐁")){
			throw new NotSupportedNameException("퐁씨는 이용할 수 없어요.");
		}
		
		setName(nm);//멤버 변수에 입력값을 저장
		
		out.println("주소를 입력하세요=>");
		String ad=sc.nextLine();
		setAddr(ad);//멤버 변수에 입력값을 저장
	}//-------------

	//**사람의 정보를 문자열로 돌려주는 메소드
	 
	public String getInfo(){
		String info="이름: "+name+"\n주소: "+addr;
		return info;
	}
	/**사람 정보를 콘솔에 출력해주는 메소드*/
	public void printAll(){
		out.println(this.getInfo());	
	}
	public String toString(){
		return name;
	}
}/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////Student.java///////////////////////////////////////////////////////////////////////
package my.school;
import java.util.*;
import static java.lang.System.out;

public class Student extends Person{
	private String id;//학번
	private String className;//학급
	
	//setter, getter
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getClassName() {
		return className;
	}
	public void setClassName(String className) {this.className = className;
	}
	//overriding
	public String getInfo() {
		String info=super.getInfo()+"\n학번: "
					+id+"\n학급: "+className;
		return info;
	}
	/**학생 정보를 입력받음*/
	public void inputInfo() {
		try {
			super.inputInfo();
		} catch (NotSupportedNameException e) {	out.println(e.getMessage());
			return;
		}
		//이름, 주소, 학번, 학급
		Scanner sc=new Scanner(System.in);
		out.println("학번을 입력하세요=>");
		String i=sc.nextLine();
		setId(i);
		out.println("학급을 입력하세요=>");
		String c=sc.nextLine();
		setClassName(c);
	}
	public void printAll() {
		out.println(this.getInfo());
	}
}///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////Teacher.java////////////////////////////////////////////////////
package my.school;
import java.util.*;
import static java.lang.System.out;

public class Teacher extends Person{

	private String id;//교번
	private String subject;//담당 과목
	
	//setter, getter
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getInfo() {
		String info=super.getInfo()+"\n교번: "+id+"\n담당과목: "+subject;
		return info;
	}
	public void inputInfo() {
		try {
			super.inputInfo();
		} catch (NotSupportedNameException e) {
			out.println(e.getMessage());
			return;
		}
		
		//이름, 주소
		Scanner sc=new Scanner(System.in);
		out.println("교번을 입력하세요=>");
		String i=sc.nextLine();
		setId(i);
		out.println("과목을 입력하세요=>");
		String s=sc.nextLine();
		setSubject(s);		
	}
	public void printAll() {
		out.println(this.getInfo());
	}
}////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////Staff.java////////////////////////////////////////////////
package my.school;
import java.util.*;
import static java.lang.System.out;

public class Staff extends Person{

	private String id;//사번
	private String dept;//부서
	//setter, getter
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getDept() {
		return dept;
	}
	public void setDept(String dept) {
		this.dept = dept;
	}
	public String getInfo() {
		String info=super.getInfo()+"\n사번: "+id+"\n부서: "+dept;
		return info;
	}
	public void inputInfo() {
		try {
			super.inputInfo();
		} catch (NotSupportedNameException e) {	out.println(e.getMessage());
			return;
		}
		
		//이름, 주소
		Scanner sc=new Scanner(System.in);
		out.println("사번을 입력하세요=>");
		String i=sc.nextLine();
		setId(i);
		out.println("부서를 입력하세요=>");
		String d=sc.nextLine();
		setDept(d);
	}
	public void printAll() {
		out.println(this.getInfo());
	}
}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////NotSupportedNameException.java////////////////////////////////////////
package my.school;
/**사용자 정의 예외 클래스
 * -ex] 콩씨 성은 등록 불가*/
public class NotSupportedNameException extends Exception  {
	
	public NotSupportedNameException(){
		super("지원되지 않는 이름입니다.");
		//예외 메시지를 super에 등록...
	}//----------
	public NotSupportedNameException(String msg){
		super(msg);
	}//-----------

}////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////SchoolApp.java(업무처리 로직을 가진 클래스-콘솔 애플리케이션)--///////////////////////////////////////////////
package my.school;
import static java.lang.System.out;
import java.util.*;
//** Console Applicaton * *//
public class SchoolApp {

	private Person[] p=new Person[30];//30명 정원
	private int count;//배열의 인덱스로 사용될 변수
	
	public Person[] getP(){
		return p;
	}
	public int getCount(){
		return count;
	}
	///**메인 메뉴를 보여주는 메소드
	public void mainMenu(){
		out.println("---------------Main Menu--------------");
		out.println("|1. 등록  2. 검색 3. 삭제 4.출력 5. 종료|");
		out.println("--------------------------------------");
		out.println("번호를 입력하세요=>");
		out.println("--------------------------------------");
	}//----------
	///**하위 메뉴를 보여주는 메소드

	public void subMenu(){
		out.println("---------------Sub Menu--------------");
		out.println("| 1.학생  2. 강사 3. 직원 4. 상위메뉴  |");
		out.println("--------------------------------------");
		out.println("번호를 입력하세요=>");
		out.println("--------------------------------------");
	}
	
	public void register(){
		//서브 메뉴 출력...케이스 별로 로직 수행
		Scanner sc=new Scanner(System.in);
		outer://레이블명
		while(true){
			subMenu();
			int no=0;
			try{
				no=sc.nextInt();
			}catch(InputMismatchException e){ out.println("숫자로 입력해야 해요!");
				return;
			}
			switch(no){
			case 1://학생
				Student st=new Student();
				st.inputInfo();//학생정보를 입력받음.
				addPerson(st);//등록된 객체를 배열에 저장한다.
				break;
			case 2://교사
				Teacher tc=new Teacher();
				tc.inputInfo();
				addPerson(tc);
				break;
			case 3://직원
				Staff sf=new Staff();
				sf.inputInfo();
				addPerson(sf);
				break;
			case 4://상위 메뉴
				break outer;//레이블 지정된 반복문을 이탈
				//return;
				//register()메소드를 호출한 쪽으로 제어권을 넘김
			default: out.println("지원되지 않는 메뉴번호입니다.");
			}
		}//while----		
	}//register()------------------
	//**등록한 사람들을 배열에 저장하는 메소드*/
	public void addPerson(Person person){
		if(count");
				String name=sc.next();
				out.println("--"+name+"님을 검색합니다.--");
				sa.findPerson(name);
				break;
			case 3://삭제
				out.println("삭제할 사람 이름=>");
				name=sc.next();
				sa.removePerson(name);
				break;
			case 4://출력
				sa.printAll();
				break;
			case 5://종료
				out.println("Bye Bye~~");
				System.exit(0);
				break;
			default:
				out.println("지원되지 않는 메뉴번호입니다.");
					
			}//switch----		
		}//while-----
	}
}//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////SchoolGui.java(GUI 구성)/////////////////////////////////////////////////////////////////////
package my.school;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class SchoolGui extends Frame{

	SchoolApp sa=new SchoolApp();
	//업무처리 로직을 가진 클래스-콘솔 애플리케이션
	Person p;
	TextArea ta;
	Button reg, del, find, print, save;
		 //등록, 삭제, 검색, 출력, 저장
	Button btStudent, btTeacher, btStaff, btFindOk,btFindClose;
			//학생, 		교사, 	직원,  		검색, 	검색종료
	Button btOk, btCancel, btClose;
	
	Dialog dial1, dial2, dial3;
			//대화상자 3개 만들기...
	Label lbName, lbAddr, lbId, lbPub;
	TextField tfName, tfAddr, tfId, tfPub, tfFindName;
	
	
	
	public SchoolGui(){
		super(":::학사관리 프로그램 v1.1:::");
		makeGui();
		
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		
		setSize(500,500);
		setVisible(true);
	}//생성자-----------
	/**GUI를 구성하는 메소드*/
	public void makeGui(){
		ta=new TextArea();
		add(ta,"Center");
		
		Panel pn=new Panel(new GridLayout(0,1, 10,10)){
			//패널 바깥 여백을 설정하는 메소드 오버라이딩
			public Insets getInsets(){
				return new Insets(10,10,10,10);
			}
		};
							//열은 1열로 고정시키고
							//행은 컴포넌트 부착하는 것에 따라
							//유동적으로..
		pn.setBackground(Color.orange);
		add(pn,"East");
		
		pn.add(reg=new Button("등  록"));
		pn.add(find=new Button("검  색"));
		pn.add(del=new Button("삭  제"));
		pn.add(print=new Button("출  력"));
		pn.add(save=new Button("저  장"));
		
		//Dialog 1만들기
		dial1=new Dialog(this,true);
		dial2=new Dialog(this, true);
		dial3=new Dialog(this, "**검색**", true);
		
		//dial1에 컴포넌트 부착---
		btStudent=new Button("학생");
		btTeacher=new Button("교사");
		btStaff=new Button("직원");
		btClose=new Button("닫기");
		
		dial1.setTitle("**등록**");
		dial1.setLayout(new GridLayout(1,0));
		dial1.add(btStudent);
		dial1.add(btTeacher);
		dial1.add(btStaff);
		dial1.add(btClose);
		
		//dial2에 컴포넌트 부착---
		Panel dp1=new Panel();
		Panel dp2=new Panel();
		Panel dp3=new Panel();
		dp1.setLayout(new GridLayout(4,1));
		dp2.setLayout(new GridLayout(4,1));
		
		dial2.add(dp1,"West");//라벨을 붙일 패널
		dial2.add(dp2,"Center");//텍스트필드 붙일 패널
		dial2.add(dp3,"South");//버튼 붙일 패널
		
		dp1.add(lbName=new Label("이름"));
		dp1.add(lbAddr=new Label("주소"));
		dp1.add(lbId=new Label("ID"));
		dp1.add(lbPub=new Label("기타"));
		
		dp2.add(tfName=new TextField());
		dp2.add(tfAddr=new TextField());
		dp2.add(tfId=new TextField());
		dp2.add(tfPub=new TextField());
		
		dp3.add(btOk=new Button("처리"));
		dp3.add(btCancel=new Button("취소"));
		
		//dial3에 검색 또는 삭제 관련 컴포넌트 부착
		Label lb=new Label("이름을 입력하세요");
		dial3.add(lb,"North");
		Panel dp4=new Panel();
		dial3.add(dp4,"Center");
		tfFindName=new TextField(20);
		dp4.add(tfFindName);
		btFindOk=new Button("확인");
		btFindClose=new Button("닫기");
		dp4.add(btFindOk);
		dp4.add(btFindClose);
		
		//리스너 부착------
		MyHandler my=new MyHandler();//이벤트 처리 클래스
		reg.addActionListener(my);
		find.addActionListener(my);
		del.addActionListener(my);
		print.addActionListener(my);
		save.addActionListener(my);
		
		btStudent.addActionListener(my);
		btTeacher.addActionListener(my);
		btStaff.addActionListener(my);
		btOk.addActionListener(my);
		btCancel.addActionListener(my);
		btClose.addActionListener(my);
		
		btFindOk.addActionListener(my);
		btFindClose.addActionListener(my);
		
		//ta를 편집 불가능하게끔...
		ta.setEditable(false);
		
	}//makeGui()--------
	
	/**이벤트를 처리하는 클래스-Inner Member Class*/
	class MyHandler implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			Object o=e.getSource();
			if(o==reg){//등록
				dial1.pack();
				//각 컴포넌트의 preferred size 만큼 압축하여
				//크기를 정한다.
				dial1.setLocation(500,0);//x,y좌표(500,0)
				dial1.setVisible(true);
				
			}else if(o==find){//검색
				dial3.setTitle("**검색**");
				dial3.pack();
				dial3.setVisible(true);
				
			}else if(o==del){//삭제
				dial3.setTitle("**삭제**");
				dial3.pack();
				dial3.setVisible(true);
				
			}else if(o==print){//출력
				String str=sa.printAll();
				ta.append(str+"\n");
				
			}else if(o==save){//저장
				//1>, 2>
				FileDialog fd
				=new FileDialog(SchoolGui.this,
						"파일저장",FileDialog.SAVE);
				fd.setVisible(true);
				//파일 경로 얻기
				String dir=fd.getDirectory();
				String file=fd.getFile();
				String filename=dir+file;
				setTitle(filename);
				
				try {
					FileWriter fw=new FileWriter(filename);
					String content=ta.getText();
					//ta로부터 가져온 내용을 fw를 통해 쓴다.
					fw.write(content);
					fw.flush();
					fw.close();
					setTitle("저장 완료");
					ta.append("저장 완료!!!->"+filename+"\n");
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
				/*텍스트에리어에 출력된 내용을 파일로 저장하자.
				 * 1> FileDialog를 저장 모드로 띄운다.
				 * 2> 파일명과 디렉토리명을 얻어와서
				 * 3> java.io.FileWriter클래스 생성자에 파일 절대경로를 넣어주고
				 * 4> ta의 내용을 FileWriter의  write()메소드를 이용해서 쓰기 작업을 한다.
				 *    ...이때 주의...FileWriter의 write()메소드 호출 후 
				 *       반드시 flush()메소드를 호출해주자.   
				 * */
				
			}else if(o==btStudent){//학생
				dial2.setTitle("**학생 등록**");
				lbId.setText("학번");
				lbPub.setText("학급");
				dial2.pack();
				dial2.setLocation(500,30);
				dial2.setVisible(true);
				
			}else if(o==btTeacher){//교사
				dial2.setTitle("**교사 등록**");
				lbId.setText("교번");
				lbPub.setText("과목");
				dial2.pack();
				dial2.setLocation(500, 30);
				dial2.setVisible(true);
				
			}else if(o==btStaff){//직원
				dial2.setTitle("**직원 등록**");
				lbId.setText("사번");
				lbPub.setText("부서");
				dial2.pack();
				dial2.setLocation(500, 30);
				dial2.setVisible(true);
				
			}else if(o==btOk){
				//사용자 정보 등록
				String name=tfName.getText();
				String addr=tfAddr.getText();
				String id=tfId.getText();
				
				String pub=tfPub.getText();
				//어떤 객체이냐에 따라 호출할 메소드가 달라진다.
				
				String title=dial2.getTitle();
				System.out.println(title);
				String word=title.substring(2, 4);
				//문자열 인덱스 2부터 4의 직전까지 잘라내어
				//돌려준다.
				System.out.println(word);
				if(word.equals("학생")){
					p=new Student();
					((Student)p).setClassName(pub);
				}else if(word.equals("교사")){
					p=new Teacher();
					((Teacher)p).setSubject(pub);
				}else if(word.equals("직원")){
					p=new Staff();
					((Staff)p).setDept(pub);
				}
				p.setName(name);
				p.setAddr(addr);
				p.setId(id);
				///////비즈니스 메소드///////////////
				sa.addPerson(p);
				////////////////////////////////////
				tfName.setText("");
				tfId.setText("");
				tfAddr.setText("");
				tfPub.setText("");
				
				//텍스트필드에 포커스가 가게끔..
				tfName.requestFocus();
				
			}else if(o==btCancel){//취소
				dial2.dispose();
				tfName.setText("");
				tfId.setText("");
				tfAddr.setText("");
				tfPub.setText("");
						
			}else if(o==btClose){
				//dial1 닫기
				dial1.dispose();
				
			}
			if(o==btFindOk){//검색(삭제)확인
				String title=dial3.getTitle();
				String word=title.substring(2, 4);
				//제목으로 검색 대화창인지 삭제 대화창인지
				//구별하기 위해 ..
				
				if(word.equals("검색")){
					String name=tfFindName.getText();
					////////////////////////////////
					String msg=sa.findPerson(name);
					////////////////////////////////
					ta.append(msg+"\n");
				}else{
					String name=tfFindName.getText();
					/////////////////////////////////
					String msg=sa.removePerson(name);
					////////////////////////////////
					ta.append(msg+"\n");
				}
				tfFindName.setText("");
				
			}else if(o==btFindClose){//검색(삭제)창 닫기
				dial3.dispose();
			}
			
		}
		
	}//////////////////
	public static void main(String[] args) {
		new SchoolGui();
	}//main()---------------

}////////////////////////////////////////////////////////////////////////////




'Java > Awt_Swing' 카테고리의 다른 글

SWING JProgressBar, JSlider  (0) 2011.12.05
Swing Demo  (0) 2011.12.05
AWT Applet에 이미지 오디오 파일 띄우기  (0) 2011.12.02
AWT 멀티 프레임 연동  (1) 2011.12.02
AWT 그림판 완성  (0) 2011.12.02

AWT Applet에 이미지 오디오 파일 띄우기

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class  MyImage2 extends Applet
{
	Button start, stop;
	Choice ch;
	Image im;
	AudioClip audio;
	int flag=0;

	public void init() {
		setLayout(new BorderLayout());
		Panel p = new Panel();
		add(p, "North");
		p.setBackground(new Color(200, 130, 80));
		p.add(start=new Button("Start"));
		p.add(stop=new Button("Stop"));

		//Choice 생성 및 부착
		ch = new Choice();
		// 초이스에 문자열로 아이템 등록...pic01
	for (int i=1;i<=7 ;i++ )
	{
		ch.add("pic"+i);
	}
	//패널에 초이스 부착
	p.add(ch);
	
	//이미지 로딩------
	im=getImage(getDocumentBase(), getParameter("pic1"));
	//오디오 파일 로딩
	audio=getAudioClip(getDocumentBase(), getParameter("audio1"));
	MyHandler my = new MyHandler();
	start.addActionListener(my);
	stop.addActionListener(my);
	ch.addItemListener(my);

	}//init()--------애플릿 실행시 딱 한번만 실행
	class MyHandler implements ItemListener, ActionListener
	{
		public void itemStateChanged(ItemEvent e) {
			String str = ch.getSelectedItem();
			showStatus(str);
			String filename= getParameter(str);
			im=getImage(getDocumentBase(), filename);
			repaint();  //중요///////
		}
	
		public void actionPerformed(ActionEvent e){
			Object o=e.getSource();
			if(o==start) {
				flag=1;
				Thread tr=new MyThread();
				tr.start();
				audio.play(); //오디오 파일 연주
			}else if(o==stop) {
				flag=0;
				audio.stop();//오디오 파일 중지
			}
		}
	}//////////////////////////
	class MyThread extends Thread
	{
		public void run() {
		//반복문 돌면서 이미지7컷을 로딩해주고 repaint()를 호출한다.....
		//sleep()를 걸어서 타임delay를 주자....
		int index=0;
		while(flag==1) {
			if(index>7)
				index=0;
				String filename=getParameter("pic"+ (++index));
				im=getImage(getDocumentBase(),filename);
				repaint();
				try{
				Thread.sleep(1000);
				}catch (InterruptedException e) {
					showStatus(e.getMessage());
				}
		}//while-----
		}
	}/////////////////////////
	public void paint(Graphics g) {
		g.drawImage(im, 50,50,200,200, this);
	}//paint()------------수시로 실행
}


'Java > Awt_Swing' 카테고리의 다른 글

Swing Demo  (0) 2011.12.05
AWT 이용 학사관리 프로그램  (0) 2011.12.05
AWT 멀티 프레임 연동  (1) 2011.12.02
AWT 그림판 완성  (0) 2011.12.02
AWT 그림판 Mouse Event ( Canvas 영역에 그리기 )  (0) 2011.12.01

AWT 멀티 프레임 연동

//멀티프레임 연동
import java.awt.*;
import java.awt.event.*;

public class  MainDemo extends Frame implements ActionListener
{
	Button open;
	Dimension dm;   //프레임 사이즈 정보를 알기위한 
	SubFrame sub;
	public MainDemo(){
		super(":: MainDemo ::");
		setSize(400, 400);
		dm=getSize();  //프레임의 사이즈 정보를 담은 Dimension얻기
		setLayout(null);
		//좌표를 잡아 컴포턴트를 붙이거나, 
		//컴포턴트 사이즈를 주고 싶다면 레이아웃을 해제하고 사용
		open = new Button("OPEN");
		add(open);
		open.setSize(150,150);//버튼의 사이즈
		Dimension bdm=open.getSize(); //버튼의 사이즈 정보를 가짐
		int centerX=(dm.width/2)-(bdm.width/2);
		int centerY=(dm.height-bdm.height)/2;

		open.setLocation(centerX,centerY); //버튼이 올라갈 x,y좌표를 설정

		// 리스너 부착
		open.addActionListener(this);

		// 서브프레임 생성
		sub =new SubFrame();
		// 서브프레임의 close버튼에 리스너 부착
		sub.close.addActionListener(this);

		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}//생성자-------

	public void actionPerformed(ActionEvent e) {
		Object o=e.getSource();
		if(o==open) {
		//1> SubFrame 객체를 생성하여 사이즈 정해주고 보여준다.
		
		
		//SubFrame sub = new SubFrame();
		// 서브프레임 close버튼에 리스너 부착---
                   //r,g,b값을 랜덤하게 주자 0-255
		  //Math.random()*범위 + 시작숫자
		 //   int r=(int)(Math.random()*256);
		 //	int g=(int)(Math.random()*256);
		 //	int b=(int)(Math.random()*256);
			java.util.Random rd=new java.util.Random();
			int r=rd.nextInt(256) + 0;
			int g=rd.nextInt(256) + 0;
			int b=rd.nextInt(256) + 0;


			sub.can.setBackground(new Color(r,g,b));

			sub.setSize(200,200);
			sub.setLocation(dm.width,0);
			sub.setVisible(true);
		}else if(o==sub.close) {
			// System.exit(0);  메인프레임까지 종료
			// sub.setVisible(false); 서브프레임 보이지 않게하는 효과
			sub.dispose();//Frame객체의 자원을 해제시킨다
		}
		
	}//------------
	
	public static void main(String[] args) 
	{
		MainDemo d=new MainDemo();
	/* 	d.setSize(500,500);
	    d.dm=d.getSize();
		System.out.println("d.dm.width:"+d.dm.width);
		System.out.println("d.dm.width:"+d.dm.height); */
		d.setVisible(true);
	}
}////////////////////////////////////

//메인 프레임에서 띄워줄 서브 프레임 클래스-----
class SubFrame extends Frame
{
	Canvas can;
	Button close;
	int r=100, g=100, b=100;
	public SubFrame() {
		can=new Canvas();
		add(can,"Center");
		can.setBackground(new Color(r,g,b));
		close=new Button("CLOSE");
		add(close, "South");
	}
}///////////////////////////

AWT 그림판 완성

import java.awt.*;
import java.awt.event.*;

public class  MyDrawing3Demo extends Frame
{
	Panel p1, p2;
	Button red, green, blue, large, small, clear, allClear;
	MyCanvas can;
	public MyDrawing3Demo(){
		super("::    ◆그림판 v1.1◆    ::");
		p1=new Panel();
		p1.setBackground(Color.blue);
		add(p1,"North");

		//Anonymous 클래스 만들기---
		p2=new Panel(){
			public Insets getInsets(){
				return new Insets(40,20,20,20);		
			}//-------------
		};
		p2.setBackground(Color.darkGray);
		add(p2,"Center");

		//버튼 만들어  p1에 부착---
		p1.add(red=new Button("RED"));
		p1.add(green=new Button("GREEN"));
		p1.add(blue=new Button("BLUE"));
		p1.add(large=new Button("크게"));
		p1.add(small=new Button("작게"));
		p1.add(clear=new Button("지우기"));
		p1.add(allClear=new Button("모두 지우기"));

		//캔버스 부착----
		can=new MyCanvas();
		can.setSize(300,300);
		can.setBackground(Color.white);
		p2.add(can);

		//버튼과 캔버스에 리스너 부착----
		MyHandler my=new MyHandler();
		red.addActionListener(my);
		green.addActionListener(my);
		blue.addActionListener(my);
		large.addActionListener(my);
		small.addActionListener(my);
		clear.addActionListener(my);
		allClear.addActionListener(my);
		can.addMouseMotionListener(my);

		addWindowListener(new WindowAdapter(){ 
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
	}//생성자-------
	//이벤트 핸들러-이너클래스----
	class MyHandler extends MouseMotionAdapter 
		implements ActionListener
	{
		public void mouseDragged(MouseEvent e){
			can.x=e.getX();
			can.y=e.getY();
			can.repaint();
		}//-----
		public void actionPerformed(ActionEvent e){
			Object o=e.getSource();
			can.flag=0;//flag를 0으로 주어 그리기가 기본작업이 되게 한다.
			if(o==red){
				can.cr=Color.red;
			}else if(o==green){
				can.cr=Color.green;
			}else if(o==blue){
				can.cr=Color.blue;
			}else if(o==large){
				can.w++;//can.w+=2;
				can.h++;
			}else if(o==small){
				if(can.w >3){//3이하로는 더 작아지지 않게끔...
					can.w--;
					can.h--;
				}
			}else if(o==clear){
				can.cr=can.getBackground(); //배경색을 칠해서 지우기
			}else if(o==allClear){
				can.flag=1;
				can.repaint();
			}
			
		}//------

	}///////////


	public static void main(String[] args) 
	{
		MyDrawing3Demo d=new MyDrawing3Demo();
		d.setSize(500,500);
		d.setVisible(true);
	}
}//////////////////////////////

class MyCanvas extends Canvas
{
	int x=-13, y=-13, w=7, h=7;
	Color cr=Color.black;
	int flag=0;
	public void paint(Graphics g){
		
		if(flag==0){ 
			//1. 그리기
			g.setColor(cr);
			g.fillOval(x, y, w, h);
		}else if(flag==1){
			//2. 모두 지우기..
			g.clearRect(0,0,300,300);
		}
	}//paint()-------
	public void update(Graphics g){
		paint(g);
	}//update()-----

}/////////////////////////////

 

AWT 그림판 Mouse Event ( Canvas 영역에 그리기 )

import java.awt.*;
import java.awt.event.*;

public class MyDrawing2Demo extends Frame
{
	MyCanvas can;
	public MyDrawing2Demo() {
		super("::Demo::");
		setLayout(new FlowLayout());
		can=new MyCanvas();
		can.setSize(300,300);
		add(can);
		can.setBackground(Color.lightGray);

		// 캔버스에 리스너 부착----
		MyHandler my = new MyHandler();
		can.addMouseMotionListener(my);

		addWindowListener(new WindowAdapter() { 
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});

	}//생성자-----
	class MyHandler extends MouseMotionAdapter
	{
		public void mouseDragged(MouseEvent e) {
			can.x=e.getX();
			can.y=e.getY();
			can.repaint();
		}
	}////////////////

	public static void main(String[] args) 
	{
		MyDrawing2Demo d = new MyDrawing2Demo();
		d.setSize(500, 500);
		d.setVisible(true);
	}
}//////////////////////////////

class MyCanvas extends Canvas
{
	int x=50, y=50;
	public void update(Graphics g) {
		paint(g);
	}
	public void paint(Graphics g) {
		g.setColor(Color.blue);
		g.fillOval(x,y,10,10);
	}
}///////////////////////////


AWT 그림판 Mouse Event(mouseDragged)

import java.awt.*;
import java.awt.event.*;

public class MyDrawingDemo extends Frame
{
	int x=50, y=50;
	public MyDrawingDemo() {
		super("::MyDrawingDemo::");

		//리스너 부착
		MyHandler my = new MyHandler();
		addMouseMotionListener(my);
		
		addWindowListener(new WindowAdapter() { 
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});

	}//생성자-----

	class MyHandler extends MouseMotionAdapter
	{
		
		public void mouseDragged(MouseEvent e) {
			x=e.getX();
			y=e.getY();
			setTitle("x:"+x+", Y:"+y);
			// paint(new Graphics());
			// paint 메소드는 개발자가 직접 호출할 수 없다 
			// JVM 소관사항....
			repaint();
			// 개발자가 repaint()를 호출하면--> JVM-->update(g)-->paint(g)
			// update는 기존에 그린 그림을 지우고 paint(g)를 호출
			// update를 오버라이딩해서 지우는 부분을 삭제

		}
	}
	public void update(Graphics g) {
		//1)배경색으로 지우고.... 2)paint(g);
		paint(g);
	}

	// paint()메소드 오버라이딩----
	public void paint(Graphics g) {
		//g.setColor(Color.blue);
		//g.fillOval(50,50, 100,100);
		g.setColor(Color.red);
		g.fillOval(x,y,10,10);
	}//paint()-------------------

	public static void main(String[] args) 
	{
		MyDrawingDemo d = new MyDrawingDemo();
		d.setSize(500, 500);
		d.setVisible(true);
	}
}


◀ PREV 123456 NEXT ▶