일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java 논리연산자
- sqld trigger
- Java Cat
- java 성별
- java Animal
- java 상속
- java string
- java spider
- SQLD 특강
- java 구구단
- Java 메소드
- JAVA for문
- SQLD 핵심포인트
- java 단축키
- sqld revoke
- sqld grant
- sqld deny
- JAVA 제어문
- JAVA 연산자
- SQLD 옵티마이저
- java
- sqld remame
- sqld 옵티마이져
- java 로또
- SQL
- sqld 자격증
- SQLD 자격시험 개념정리
- PLSQL
- java 함수
- java Fish
- Today
- Total
SQLD, ECLIPS, JAVA,PYTHON, NODE....
[Eclips] Java Class 11 - I/O 연습, UI구현 및 연동(I/O) 본문
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();
}
}
}
(연습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. 컴퓨터에 있는 계산기는 많은 코드가 들어간 복잡하게 코딩된 부분이라고 함.
'Java' 카테고리의 다른 글
[Eclips] Java class 10 - 이너클래스 Inners(Nested) class, 스레드Thread, 멀티 스레드 multi Thread, I/O 상속 (0) | 2023.12.20 |
---|---|
[Eclips] Java class 8 - String 함수들, enum(나열형) (0) | 2023.12.18 |
[Eclips] Java - 상속 및 OOP 과제 (3) | 2023.12.17 |
[Eclips] Java Class 7 - toString, 추상클래스(abstract), 인터페이스(interface) (0) | 2023.12.15 |
[Eclips] Java Class 6 - 상속구조, final, tostring (0) | 2023.12.14 |