SQLD, ECLIPS, JAVA,PYTHON, NODE....

[Eclips] Java Class 11 - I/O 연습, UI구현 및 연동(I/O) 본문

Java

[Eclips] Java Class 11 - I/O 연습, UI구현 및 연동(I/O)

D_Aiden 2023. 12. 21. 08:59
728x90
반응형
SMALL

2023.12.21

## I/O 연습

(연습1) 123.txt파일을 생성하면서 bin폴더에 1~9까지 출력

package io;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedOutputStreamEx {
	public static void main(String[] args) {
		try {
			FileOutputStream fos = new FileOutputStream("123.txt");		//기본경로는 프로젝트명
			BufferedOutputStream bos = new BufferedOutputStream(fos, 5);
//			BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("123.txt"));  //한줄로 쓸 수 있음  //한줄로 코딩가능

//123.txt에 1~9까지 출력
			for(int i='1'; i<='9'; i++) {
			bos.write(i);	//변수가 담긴 경로에 write(for문 변수)로 선언
			}
			bos.close();	//write로 읽으면 close로 끝내야 됨.
		}catch(IOException e) {		//try catch문엔 (IOException 변수) 형태로 코딩
			e.printStackTrace();	//화면 출력코드(catch에 선언된 변수를 printStackTrace()로 호출)
		}
	}
}

(결과)

(연습2) 기본형, 자료형 데이터를 처리하는 방법

package io;
import java.io.BufferedOutputStream;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class DataFilterStreamEx {

	public static void main(String[] args) {
		try {									//I/O구문
			OutputStream out = new FileOutputStream("data.bin");	// 출력할 파일명 지정가능
			BufferedOutputStream bos = new BufferedOutputStream(out);
			DataOutputStream filterOut = new DataOutputStream(bos);

//8가지 기본형 자료형으로 데이터를 처리 가능하게 하는 클래스
			filterOut.writeInt(279); 			//fileterOut변수에 int형태로 읽고(write) 
			filterOut.writeDouble(45.7893);		//double로 상수형으로 읽고
			filterOut.writeChar(65);			//char로 문자로 읽고
			filterOut.close();					//close로 닫는다.
		}catch (IOException e) {
		}
	}
}

 

 

(연습3) 숫자를 대입해서 출력

package io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.xml.sax.InputSource;

public class DataFilterStreamEx {
	public static void main(String[] args) {
//출력할 데이터를 직접 지정한 파일로 내보내는(Output) 코드
		try {
			OutputStream out = new FileOutputStream("data.bin");	//출력할 파일명
			BufferedOutputStream bos = new BufferedOutputStream(out);
			DataOutputStream filterOut = new DataOutputStream(bos);

//8가지 기본형 자료형으로 데이터를 처리 가능하게 하는 클래스
			filterOut.writeInt(279); 
			filterOut.writeDouble(45.7893);
			filterOut.writeChar(65);
			filterOut.close();		//close로 마감처리 해야 됨

//num1,num2,num3에 숫자를 대입(Input)해서 출력		
			InputStream in = new FileInputStream("data.bin");		//출력할 파일명
			BufferedInputStream bin = new BufferedInputStream(in);
			DataInputStream filterIn = new DataInputStream(bin);
			
			int num1 = filterIn.readInt();	//1.선언된 변수를 읽어서
			double num2 = filterIn.readDouble(); 
			char num3 = filterIn.readChar();
			filterIn.close();		//close로 마감처리 해야 됨
			
			System.out.println(num1);		//1-1.변수를 출력
			System.out.println(num2);
			System.out.println(num3);

		}catch (IOException e) {
		}
	}
}

결과

279
45.7893
A

(연습4) 

package io;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterEx {
	public static void main(String[] args) {

		try {
			FileWriter fw = new FileWriter("tst.txt");
			fw.write("아자아자 자바자바");
			fw.write("오늘도 화이팅");
			fw.close();
		}catch(IOException e) {
		e.printStackTrace();	//e의 에러출력
		}
	}
}

printStackTrace
예외발생 당시의 호출스택(Call Stack)에 있었던 메소드의 정보와 예외 메시지를 화면에 출력한다.

 

(연습5) read함수로 직접 출력 형태

package io;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterEx {
	public static void main(String[] args) {
		try {
			FileWriter fw = new FileWriter("tst.txt");
			fw.write("아자아자 자바자바");
			fw.write("오늘도 화이팅");
			fw.close();
		}catch(IOException e) {
		e.printStackTrace();
		}
	}
}
package io;

import java.io.FileReader;
import java.io.IOException;

public class FileReaderEx {
	public static void main(String[] args) {
		try {		
			FileReader fr = new FileReader("tst.txt");
			int data = 0;
			while((data=fr.read())!=-1){
//				char c = (char)data;
				System.out.print((char)data);
		}
			System.out.println();
			fr.close();
		}	catch(IOException e) {
			e.printStackTrace();
		}
	}
}

저장된 파일에 있는 값을 eclips에 직접 출력하는 코드

(연습7) String으로 입력/출력 모두 코딩해서 출력방법

package io;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class StringIOText {
	public static void main(String[] args) {
		try {
			BufferedWriter out = new BufferedWriter(new FileWriter("String.txt"));
			out.write("강추위 이어져.. 아침 최저 -20도"); 		//라인스킵을 포함하지 않음.
			out.newLine();  					//라인스킵 포함하는 코드
			out.write("동지이자 금요일인");
			out.newLine();
			out.write("아침 최저기온");
			out.newLine();
			out.write("바람도 강하게");
			out.newLine();
			out.write("경기 남부");
			out.newLine();
			out.write("미세먼지 농도");
			out.newLine();
			out.write("충남 서해안");
			out.close();
			System.out.println("기사입력 완료!!");
		}catch(IOException e) {
		}
	}
}

결과 화면


(연습8) 파일에 있는 String 읽어오기

package io;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;

public class StringIOText {
	public static void main(String[] args) {
		try {
			BufferedWriter out = new BufferedWriter(new FileWriter("String.txt"));
			out.write("강추위 이어져.. 아침 최저 -20도"); 		//라인스킵을 포함하지 않음.
			out.newLine();  					//라인스킵 포함하는 코드
			out.write("동지이자 금요일인");
			out.newLine();
			out.write("아침 최저기온");
			out.newLine();
			out.write("바람도 강하게");
			out.newLine();
			out.write("경기 남부");
			out.newLine();
			out.write("미세먼지 농도");
			out.newLine();
			out.write("충남 서해안");
			out.close();
			System.out.println("기사입력 완료!!");
			System.out.println("============================");
			System.out.println("파일로부터 기사 읽어 화면에 출력하기");
			
			BufferedReader in= new BufferedReader(new FileReader("String.txt"));
			String str;
			while(true) {
				str=in.readLine();
				if(str==null)
					break;
				System.out.println(str);
			}
		}catch(IOException e) {
		}
	}
}
기사입력 완료!!
============================
파일로부터 기사 읽어 화면에 출력하기
강추위 이어져.. 아침 최저 -20도
동지이자 금요일인
아침 최저기온
바람도 강하게
경기 남부
미세먼지 농도
충남 서해안

 

(연습9) 장바구니를 파일로 출력하는 방법

package nested;
import java.util.ArrayList;

//장바구니 클래스
public class Cart {
	ArrayList<Item> list = new ArrayList<Cart.Item>();
	
//장바구니에 상품추가 메소드
	void addItem(String name, int num, int unitprice) {
		list.add(new Item(name,num,unitprice));
	}

//장바구니에 상품삭제 메소드
	void removeItem(int index) {
		list.remove(index);
	}
//상품들의 객수
	int getItemNum() {
		return list.size();
	}

//장바구니 하나의 상품 가져오기
	Item getItem(int index) {
	return list.get(index);
	}
	
//장바구니 전체 총금액 구하기
	int getTotalPrice() {
		int total = 0;
		for(Item item : list) {
			total += item.getPirce();
		}
		return total;
	}
//장바구니 종류수량(갯수) 변경하기(index, num)형태
	void changeItemNumber(int index, int num) {
	Item item = list.get(index);
	item.num =num;
	}

//장바구니에 담길 상품 클래스
	class Item	{
		String name;
		int num;
		int unitPrice;
		public Item(String name, int num, int unitPrice) {
			this.name=name;
			this.num=num;
			this.unitPrice=unitPrice;
		}
//상품당 금액
		int getPirce() {
			return unitPrice *num;
		}
//장바구니를 파일로 보내는 코드
	public String toString() {
		String str = this.name + "/" + this.num + "/" + this.unitPrice;
		return str;
	}
	}
}
package nested;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class CartTest {
public static void main(String args[]) {
        Cart cart = new Cart();
        cart.addItem("쵸콜렛", 3, 1000);
        cart.addItem("케이크", 1, 25000);
        cart.addItem("샴페인", 1, 7000);
       Cart.Item item = cart.new Item("꽃다발", 1, 5000);
        cart.list.add(item);
//        printCart(cart);
        fileWriter(cart, "Cart.txt");		//Cart란 텍스트로 파일 불러오기
    }
//장바구니 정보출력
    static void printCart(Cart cart) {      
        int num = cart.getItemNum();
        System.out.println("      상품명   수량   단가    금액");        
        System.out.println("----------------------------------");        
        for (int cnt = 0; cnt < num; cnt++) {   		// 장바구니의 상품 목록을 순서대로 가져와서 출력!!
            Cart.Item item = cart.getItem(cnt);
            System.out.printf("%3d %5s %5d %7d %7d %n", cnt+1, item.name, item.num, item.unitPrice, item.unitPrice);
        }       
        System.out.println("----------------------------------");        
        System.out.printf("      총계              %10d %n", cart.getTotalPrice());
    }
    
//장바구니를 파일로 출력하는 코드
    static void fileWriter(Cart cart, String filename) {
    	PrintWriter writer = null;				//PrintWriter로 파일로 생성하는 코드(자주 쓰게 됨)
    	try {
    		writer = new PrintWriter(new FileWriter(filename));
    		int num = cart.getItemNum();				//장바구니 크기
    		for(int i=0; i<num; i++) {
    			writer.println(cart.getItem(i));
    		}
    		writer.close();
    	}catch(IOException e) {
    		
    	}
    }
}

(연습9) 파일에 저장된 정보를 출력하시오.

package nested;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.StringTokenizer;

public class CartTest {
	public static void main(String args[]) {
		Cart cart = new Cart();
		cart.addItem("쵸콜렛", 3, 1000);
		cart.addItem("케이크", 1, 25000);
		cart.addItem("샴페인", 1, 7000);
		Cart.Item item = cart.new Item("꽃다발", 1, 5000);
		cart.list.add(item);
		//        printCart(cart);
		fileWriter(cart, "Cart.txt");		//Cart란 텍스트로 파일 불러오기

		FileReader("Cart.txt");		
	}
	private static void FileReader(String fileName) {

	}
	//장바구니 정보출력
	static void printCart(Cart cart) {      
		int num = cart.getItemNum();
		System.out.println("      상품명   수량   단가    금액");        
		System.out.println("----------------------------------");        
		for (int cnt = 0; cnt < num; cnt++) {   				// 장바구니의 상품 목록을 순서대로 가져와서 출력!!
			Cart.Item item = cart.getItem(cnt);
			System.out.printf("%3d %5s %5d %7d %7d %n", cnt+1, item.name, item.num, item.unitPrice, item.unitPrice);
		}       
		System.out.println("----------------------------------");        
		System.out.printf("      총계              %10d %n", cart.getTotalPrice());
	}

//장바구니를 파일로 출력하는 코드
	static void fileWriter(Cart cart, String filename) {
		PrintWriter writer = null;				//PrintWriter로 파일로 생성하는 코드(자주 쓰게 됨)
		try {
			writer = new PrintWriter(new FileWriter(filename));
			int num = cart.getItemNum();				//장바구니 크기
			for(int i=0; i<num; i++) {
				writer.println(cart.getItem(i));
			}
			writer.close();
		}catch(IOException e) {
		}
	}
    
//파일의 장바구니 목록 화면에 출력 	
	static void fileReader(String fileName) {
		try {
			BufferedReader in = new BufferedReader(new FileReader(fileName));
			String line;

			System.out.println("===================");
			System.out.println("상품명 수량 단가 금액");
			System.out.println("=================");
			while((line = in.readLine()) != null) {
				StringTokenizer st = new StringTokenizer(line, "/");
				while(st.hasMoreTokens()) {
					System.out.println(st.nextToken().trim() + "");
				}
				System.out.println();
			}
			System.out.println("--------------");
			in.close();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

 

## UI (User Interface)

- cui(명령 프롬프트)
- gui(탐색기 형태)

Awt: (구) OS의 환경영향 받음. 파일명: java.awt
swing: 파일명은 javax.swing 형태

생성: JButton b = new JButton("확인")

1) Layout Manager 선택(기본값: boarder)
- boarder: 동서남북중앙 잡을때 사용
- grid: 행열이 있을때 사용
- card: 
- Folw: 왼쪽 --> 오른쪽 흐르듯이 사용

2) component(도구)
- layout Manaer
- button
- textbox
- radiobox
- ... 종류가 많음

ActionListner
actionperformed() { }
- 마우스클릭
- 리스트 항목에서
- 이름없는 클래스를 구현하는 이유: 단발성 이벤트를 걸어두기 위해서 한번쓰고 소멸해도 되므로...

(연습10) UI구현

package ui;

import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class DialogEventTest {

	public static void main(String[] args) {
		Frame f = new Frame("Parent"); 			//1.도화지 개념(Frame으로 선언) 생성은 큰거부터
		f.setSize(600, 400);					//2.도화지 크기를 정하는 코드 setSize(가로, 세로)
			
		final Dialog info = new Dialog(f, "Infomation", true);	// 3. Dialog(변수명, 문자, true/false)형태
		info.setSize(300,200);									// 4. 컨퍼런트를 생성
		info.setLocation(50,50);								// 5. 두번째 프레임 생성
		info.setLayout(new FlowLayout()); 		//6.setLayout new로 선언해야 됨		
		
		Label msg = new Label("It's Dialog model", Label.CENTER);
		Button ok = new Button("ok");
		
//이벤트 생성(이름없는 클래스)		
		ok.addActionListener(new ActionListener() {	//7.액션 이벤트. (이름없는 클래스) 생성방법: addActionListner 선언 후 new ActionListener로 선언하면 생성됨(도화지 닫힘)
			
			@Override
			public void actionPerformed(ActionEvent e) {	//ActionListener에서 override가 자동생성 됨
				// TODO Auto-generated method stub
				info.setVisible(false);					//8.(이름없는 클래스)도화지에서 true가 false되면 닫히는 형태
				info.dispose();							//9.(이름없는 클래스)의 도화지를 닫음
			}
		});		
		
		info.add(msg);				//10.선언된 메세지 호출
		info.add(ok);				//10.두번째 프레임에 ok버튼을 "확인"으로 추가
		f.setVisible(true); 		//11.f화면 띄우기 --> false되면 닫힘
		info.setVisible(true);		//12.info화면 띄우기 --> false되면 닫힘
	}

}
package ui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class MenuEx extends JFrame implements ActionListener {	//이벤트 관련 이름없는 클래스를 상속해서 사용함.

//맴버변수 선언
	JMenuBar mb;	//메뉴바를 선언

	JMenu mFile;	//메뉴에 File선언
	JMenu mHelp;	//메뉴에 Help선언

	JMenuItem miNew;	//File메뉴에 mi+New선언
	JMenuItem miOpen;	//File메뉴에 mi+Open선언
	JMenuItem miSave;	//File메뉴에 mi+Save선언
	JMenuItem miExit;	//File메뉴에 mi+Exit선언

	JMenuItem miInfo;	//Help메뉴에 mi+Info선언

	JFileChooser fc;	//파일찾기


//생성자 함수(모든 컴퍼넌트를 생성하는 곳)
	MenuEx() {
		super("Menu Test");
		// 멤버 변수 초기화
		mb = new JMenuBar();				//도화지에 추가된 MenuBar 생성

		mFile = new JMenu("File");      	//도화지에 추가된 MenuBar의 이름 선언
		mHelp = new JMenu("Help");			//도화지에 추가된 MenuBar의 이름 선언

		miNew = new JMenuItem("New");      //메뉴의 항목(순서대로 생성됨)
		miOpen = new JMenuItem("Open");
		miSave = new JMenuItem("Save");
		miExit = new JMenuItem("Exit");

		miInfo = new JMenuItem("Info");

		fc = new JFileChooser();
	}

//화면구현 메소드 생성
	void display() {
		
		// 메뉴 구성
		mb.add(mFile);			//mb생성자 함수에 File추가 형태
		mb.add(mHelp);			//mb생성자 함수에 Help추가 형태

		// 메뉴별 서브메뉴 구성
		mFile.add(miNew); 		//File에 New 추가시킴
		mFile.add(miOpen);		//File에 Open 추가시킴
		mFile.add(miSave);		//File에 Save 추가시킴
		mFile.addSeparator();	//File에 구분자 추가시킴
		mFile.add(miExit);		//File에 Exit 추가시킴

		mHelp.add(miInfo);		//Help에 Info 추가시킴

//도화지의 메뉴바, 프레임 크기, 종료 버튼 이벤트 설정, 프레임이 표시될때 true.
		// 메뉴바 설정
		setJMenuBar(mb);
		
		// 프레임 크기 설정
		setSize(400, 300);
		
		// 종료 버튼 이벤트 설정
		setDefaultCloseOperation(EXIT_ON_CLOSE);	//종료버튼 이벤트 설정
		
		// 프레임 표시
		setVisible(true);		//이벤트 설정에 프레임 true
	}

	//이벤트 설정 메소드(객체와 이벤트 연결)
	void eventProcess () {

	}

	//오버라이딩
	public void actionPerformed(ActionEvent e) {
	}

	public static void main(String[] args) {	
		MenuEx frm = new MenuEx();
		frm.display();
		frm.eventProcess();
	}
}

UI 구성결과


(연습11) UI구현 창닫고,파일찾고,하위폴더 오픈(이벤트설정 메소드 연결)

package ui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

public class MenuEx extends JFrame implements ActionListener {	//이벤트 관련 이름없는 클래스를 상속해서 사용함.

//맴버변수 선언
	JMenuBar mb;	//메뉴바를 선언

	JMenu mFile;	//메뉴에 File선언
	JMenu mHelp;	//메뉴에 Help선언

	JMenuItem miNew;	//File메뉴에 mi+New선언
	JMenuItem miOpen;	//File메뉴에 mi+Open선언
	JMenuItem miSave;	//File메뉴에 mi+Save선언
	JMenuItem miExit;	//File메뉴에 mi+Exit선언

	JMenuItem miInfo;	//Help메뉴에 mi+Info선언

	JFileChooser fc;	//파일찾기


//생성자 함수(모든 컴퍼넌트를 생성하는 곳)
	MenuEx() {
		super("Menu Test");
		// 멤버 변수 초기화
		mb = new JMenuBar();				//도화지에 추가된 MenuBar 생성

		mFile = new JMenu("File");      	//도화지에 추가된 MenuBar의 이름 선언
		mHelp = new JMenu("Help");			//도화지에 추가된 MenuBar의 이름 선언

		miNew = new JMenuItem("New");      //메뉴의 항목(순서대로 생성됨)
		miOpen = new JMenuItem("Open");
		miSave = new JMenuItem("Save");
		miExit = new JMenuItem("Exit");

		miInfo = new JMenuItem("Info");

		fc = new JFileChooser();	//이벤트 감지 코드
	}

//화면구현 메소드 생성
	void display() {
		
		// 메뉴 구성
		mb.add(mFile);			//mb생성자 함수에 File추가 형태
		mb.add(mHelp);			//mb생성자 함수에 Help추가 형태

		// 메뉴별 서브메뉴 구성
		mFile.add(miNew); 		//File에 New 추가시킴
		mFile.add(miOpen);		//File에 Open 추가시킴
		mFile.add(miSave);		//File에 Save 추가시킴
		mFile.addSeparator();	//File에 구분자 추가시킴
		mFile.add(miExit);		//File에 Exit 추가시킴

		mHelp.add(miInfo);		//Help에 Info 추가시킴

//도화지의 메뉴바, 프레임 크기, 종료 버튼 이벤트 설정, 프레임이 표시될때 true.
		// 메뉴바 설정
		setJMenuBar(mb);
		
		// 프레임 크기 설정
		setSize(400, 300);
		
		// 종료 버튼 이벤트 설정
		setDefaultCloseOperation(EXIT_ON_CLOSE);	//종료버튼 이벤트 설정
		
		// 프레임 표시
		setVisible(true);		//이벤트 설정에 프레임 true
	}

	//이벤트 설정 메소드(객체와 이벤트 연결)
	void eventProcess () {
		miOpen.addActionListener(this);			//1.이벤트 감지 메소드 this로 확인시킴 --> 오버라이딩으로 넘어가서 이벤트별로 처리
		miSave.addActionListener(this);			//1-1.이벤트 감지 메소드 this로 확인시킴 --> 오버라이딩으로 넘어가서 이벤트별로 처리
		miExit.addActionListener(this);			//1-2.이벤트 감지 메소드 this로 확인시킴 --> 오버라이딩으로 넘어가서 이벤트별로 처리	
		miInfo.addActionListener(this);			//1-3.이벤트 감지 메소드 this로 확인시킴 --> 오버라이딩으로 넘어가서 이벤트별로 처리
		
	}

	//오버라이딩
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == miOpen) {					//2.miOpen이라는 이벤트를 받는다면
			fc.showOpenDialog(this);					//3.JFileChooser(찾아보기)가 실행되도록 this를 받음
		}else if(e.getSource() == miSave) {
			fc.showSaveDialog(this);					//4.파일 찾기(파일 확장자별로 연결되지 않은 상태
		}else if(e.getSource() == miExit) {
			System.exit(0);								//5.프로그램 종료
		}else if(e.getSource()==miInfo) {
			JOptionPane.showMessageDialog(this, "작성자: 홍동우");
		}
	}

	public static void main(String[] args) {	
		MenuEx frm = new MenuEx();
		frm.display();
		frm.eventProcess();
	}
}

(연습12) 채팅창 만들기

package ui;

import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TextEx extends Frame{
	TextField tf = new TextField();
	TextArea ta = new TextArea();

	public TextEx(String title) {
		super(title);
		tf = new TextField();
		ta = new TextArea();
		add(ta,"Center");					//채팅창에 입력된 값이 위로 올라가도록
		add(tf,"South");					//채팅창을 하단으로
		tf.addActionListener(new ActionListener() {

		@Override
		public void actionPerformed(ActionEvent e) {
			ta.append(tf.getText()+"\n");	//채팅창에 입력된 값을 갖고 오는
			tf.setText(""); 				//채팅창에 입력된 값이 사라지도록 빈칸으로
			tf.requestFocus(); 				//커서(requestFocus)가 채팅장으로 들어가도록
			}
		});		//오버라이드 마무리
		ta.setEditable(false);		//채팅창에 입력된 값 사라지기
		setSize(300,200);			//채팅창 사이즈
		setVisible(true);			//채팅창에 입력된 값 보여주기
		tf.requestFocus();			//커서(requestFocus)가 다시 나타나도록
	}

	public static void main(String[] args) {
		TextEx mainWin = new TextEx("텍스트 입력 창 이벤트 연습");

	}

}

채팅창 구현

(연습13) UI와 IO연결

package ui;

import java.awt.BorderLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.sql.rowset.RowSetMetaDataImpl;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class UIForm extends JFrame{
	JTextArea ta;
	JButton bSave, bLoad, bClear;

	UIForm()
	{
		ta = new JTextArea();      					//입력공간을 ta로 선언
		bSave = new JButton("파일저장");				//도화지명 한글로 선언
		bLoad = new JButton("파일읽기");				//도화지명 한글로 선언
		bClear = new JButton("화면지우기");				//도화지명 한글로 선언
	}

	void addLayout()
	{
		JPanel pCenter    = new JPanel();			//panel은 도화지 1개
		pCenter.setLayout( new BorderLayout() );		//기본값이므로 선언안해도 됨
		pCenter.add("Center", ta );					

		JPanel pSouth   = new JPanel();				//panel에 도화지1개 추가
		pSouth.add( bSave );						//도화지에 버튼 추가
		pSouth.add( bLoad );						//도화지에 버튼 추가
		pSouth.add( bClear );						//도화지에 버튼 추가

		getContentPane().add("Center", pCenter );	//JButton 위치를 중앙
		getContentPane().add("South",  pSouth );	//JButton 위치를 하단

		setSize( 400, 350 );						//panel 사이즈
		setVisible( true );						//화면보여주기: true선언

		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	}

	public void eventProc() {
//파일저장 버튼이 눌렀을 때
		bSave.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {		//(이름없는 객체선언:쓰고 버림)오버라이드해서
				JFileChooser fc = new JFileChooser();			//파일찾기(FIleChooser)를 선언
				int returnValue = fc.showSaveDialog(null);		//null로 값을 입력되도록 
				if(returnValue == JFileChooser.APPROVE_OPTION) {	//리턴값이 if approve(yes, ok) is chosen.
					File f= fc.getSelectedFile();					//선택한 파일을 불러오는 명령어 getSelectedFile 임
					String filePath = f.getPath();					//String으로 문자입력 되면
					try {											//I/O로 구현
						FileWriter out = new FileWriter(filePath);	//파일을
						out.write(ta.getText());					//파일 쓰기
						out.close();								//창 닫기
					}catch(IOException a) {
					}
				}
			}
		});	
//파일읽기 버튼 눌렀을 때
		bLoad.addActionListener(new ActionListener() {				//파일읽기 선언
			public void actionPerformed(ActionEvent ev) {			//이름없는 객체 선언
				JFileChooser fc = new JFileChooser();				//파일찾기를 변수 fc로 선언
				int result = fc.showSaveDialog(null);				//result를 int로 선언해서 파일찾는 fc변수 값을 null로 입력되도록
				if(result == JFileChooser.APPROVE_OPTION) {			//리턴값이
					try {											//I/O로 구현
						File f = fc.getSelectedFile();				//선택한 파일을 불러오는 명령어 getSelectedFile
						BufferedReader in = new BufferedReader(new FileReader(f.getPath())); 	// 파일호출 변수인 f를 in으로 객체선언 

						String line = "";							//line변수를 빈공간으로 선언
						String s = "";								//s변수를 빈공간으로 선언
																	
						while((line = in.readLine()) !=null) {		//while문으로 파일에 line 
							s +=line+"\n";							//변수s를 변수line에 넣어서 증가시킴(?)
						}
						ta.setText(s);							//ta(입력공간)을 변수(s)에 넣어서 setText로 불러오기
						if(in != null)							//선언된 파일호출 객체in이 null이 아닐떄(즉, 선택될때)
							in.close();							//in을 닫는다
					}catch(IOException e2) {
					}
				}
			}
		});

//화면 지우기 버튼 눌렀을 때
		bClear.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				ta.setText("");		
				ta.requestFocus();				//화면지우기 눌렀을때 
			}
		});
	}
}

컴퓨터에 파일저장, 파일읽기 등을 java로 실행할 수 있음
파일크기, 버튼 종류(한글/영어 가능), 파일 읽어오기, 파일 닫기 등 모든 동작은 프로그래밍 된 부분.
(단, UI분야는 디자인이 추가되야 구현이 좋아 보임.)

ex. 컴퓨터에 있는 계산기는 많은 코드가 들어간 복잡하게 코딩된 부분이라고 함.

 

728x90
반응형
LIST