IT/JAVA (17.12.18~)

20일 JAVA(20)

만두토끼 2018. 1. 16. 18:20

1. 텍스트 입력 Control 

1) JTextField

=>한 줄의 문자열을 입력받기 위한 Control

=>String getText(): 입력된 문자열을 리턴해주는 메소드


2) JPasswordField

=>비밀번호를 입력받기 위한 Control


3) JTextArea

=>여러 줄의 문자열을 입력받기 위한 Control




2. JComboBox

=>여러 개의 항목 중 하나의 항목을 선택할 때 사용하는 Control

=>보통 항목의 개수가 적을 때는 JRadioButton을 사용하고 항목의 개수가 많을 때는 JComboBox를 사용


1) 생성자

JComboBox()

JComboBox(E[] items): 문자열 배열을 이용해서 생성

JComboBox(Vector<E> items): 문자열 Vector를 이용해서 생성


2) 주요 메소드

void addItem(E item): 항목 추가

int getSelectedIndex(): 선택한 항목의 인덱스

Object getSelectedItem(): 선택한 항목의 객체




3 .JList

=>여러 개의 펼쳐진 항목에서 하나 또는 다중으로 선택할 때 사용하는 Control

1) 생성자

JList()

JList(E[] listData)

JList(Vector<? extends E> listData)


2) 주요 메소드

int getSelectedIndex(): 선택한 항목 1개의 인덱스를 정수로 리턴

int [] getSelectedIndices(): 선택한 항목의 인덱스를 배열로 리턴

Object getSelectedValue(): 선택한 항목 1개의 데이터를 리턴

List<E> getSelectedValuesList(): 선택한 항목들을 List로 리턴




4 .JTable

=>데이터를 행과 열로 출력해주는 Control

=>생성할 때 배열의 데이터를 가지고 생성하면 나중에 수정을 못하고 TableModel을 가지고 생성하면 수정이 가능합니다.

=>JTable의 역활은 화면 출력만을 담당하고 실제 데이터는 TableModel이 관리합니다.

=>JTable에서는 데이터를 삽입하거나 삭제하는 메소드가 존재하지 않습니다.


1) TableModel

=>JTable의 데이터를 관리하는 클래스

=>생성할 때는 2차원 배열이나 Vector 1개와 1차원 배열이나 Vector 1개를 가지고 생성합니다.

=>JTable로부터 가져올 때는 JTable의 getModel 이라는 메소드를 호출해서 JTable과 연결된 TableModel을 가져올 수 있습니다.

=>TableModel에 데이터를 삽입하거나 삭제하고 updateUI()를 호출하면 테이블이 갱신됩니다.




5. String이 아닌 데이터를 String으로 변환하기

기본형: + ""

참조형: toString()을 호출하면 됩니다.




실습) 테이블에 데이터를 출력하고 삽입과 삭제를 구현하기

1.윈도우 만들기

2.테이블을 윈도우에 배치해서 데이터 출력하기

3.테이블 아래에 데이터를 입력할 수 있는 부분과 삽입과 삭제 버튼 배치하기

package java0116;


public class Main1 {


public static void main(String[] args) {

// TODO Auto-generated method stub

new DataWindow();

}

}



package java0116;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.JTextField;

import javax.swing.table.DefaultTableModel;

import javax.swing.table.TableModel;


public class DataWindow extends JFrame {

private static final long serialVersionUID = 1L;


public DataWindow() {

//테이블에 출력할 데이터 만들기

//컬럼이름 만들기

String [] columns = {"이름", "분야", "나이"};

//데이터 만들기

String [][] datas = {

{"태연", "가수", "30"},

{"아이유", "가수", "26"},

{"윤아", "배우", "29"},

{"양세형", "개그맨", "35"},

{"이나영", "연예인", "38"}

};


//데이터를 테이블에 출력하기 위해서 TableModel로 변경

TableModel model = new DefaultTableModel(datas, columns);

//위의 데이터를 가지고 테이블을 생성

JTable table = new JTable(model);


//ScrollPane을 생성해서 JTable을 배치하고 중앙에 배치

JScrollPane sc = new JScrollPane(table);

add("Center", sc);


JPanel p = new JPanel();

JLabel lblName = new JLabel("이름");

p.add(lblName);


JTextField txtName = new JTextField(5);

p.add(txtName);


JLabel lblCategory = new JLabel("분야");

p.add(lblCategory);

JComboBox<String>cbCategroy = 

new JComboBox<String>();

cbCategroy.addItem("가수");

cbCategroy.addItem("배우");

cbCategroy.addItem("개그맨");

cbCategroy.addItem("연예인");

p.add(cbCategroy);


JLabel lblAge = new JLabel("나이");

p.add(lblAge);


JTextField txtAge = new JTextField(3);

p.add(txtAge);


JButton btnInsert = new JButton("삽입");

p.add(btnInsert);

JButton btnDelete = new JButton("삭제");

p.add(btnDelete);

add("South", p);



setTitle("데이터 작업");

setBounds(100,100, 600,300);

setVisible(true);

setDefaultCloseOperation(EXIT_ON_CLOSE);


//버튼을 눌렀을 때는 ActionEvent 발생

ActionListener listener = new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

switch(e.getActionCommand()) {

case "삽입":

//입력하거나 선택한 데이터 가져오기

String name = txtName.getText();

String age = txtAge.getText();

String category = 

cbCategroy.getSelectedItem().toString();


if(name.trim().length() < 1) {

JOptionPane.showMessageDialog(

null, "이름은 필수 입력", "입력오류",

JOptionPane.ERROR_MESSAGE);

return;

}

if(age.trim().length() < 1) {

JOptionPane.showMessageDialog(

null, "나이는 필수 입력", "입력오류",

JOptionPane.ERROR_MESSAGE);

return;

}

//age는 숫자로만 구성되어야 합니다.

for(int i=0; i<age.length(); i=i+1) {

char ch = age.charAt(i);

if(ch < '0' || ch > '9') {

JOptionPane.showMessageDialog(

null, "나이는 숫자로만 입력", "입력오류",JOptionPane.ERROR_MESSAGE);

return;

}

}


//데이터 삽입 작업

String [] row = {name, category, age};


//테이블을 모델을 꺼내기

//JTable의 Model은 DefaultTableModel 클래스 타입인데

//getModel로 리턴받게 되면 TableModel로 리턴되서

//원래의 자료형으로 형변환해서 사용합니다.

DefaultTableModel m = 

(DefaultTableModel)table.getModel();

//모델에 데이터 추가

m.addRow(row);

JOptionPane.showMessageDialog(

null, "삽입에 성공", "데이터 삽입",JOptionPane.INFORMATION_MESSAGE);

txtName.setText("");

txtAge.setText("");

cbCategroy.setSelectedIndex(0);


break;

case "삭제":

//테이블에서 선택한 행 찾아오기

int rownum = table.getSelectedRow();

//선택이 안된 경우는 음수값

if(rownum < 0) {

JOptionPane.showMessageDialog(

null, "삭제할 행을 선택하세요", "데이터 삭제",JOptionPane.ERROR_MESSAGE);

return;

}

//Confirm 대화상자 출력

int r = JOptionPane.showConfirmDialog(

null, "정말로 삭제?", "데이터 삭제",JOptionPane.YES_NO_OPTION);

//예를 눌렀다면

if(r == 0) {

DefaultTableModel m1 = 

(DefaultTableModel)table.getModel();

m1.removeRow(rownum);

JOptionPane.showMessageDialog(

null, "삭제 성공", "데이터 삭제",JOptionPane.INFORMATION_MESSAGE);

}

break;

}

}

};


//버튼과 Listener 연결

btnInsert.addActionListener(listener);

btnDelete.addActionListener(listener);

}

}






6. File 클래스 - java.io 패키지

=>파일에 대한 정보를 리턴하고 파일을 조작하는 메소드를 소유한 클래스

1) 생성자

File(String filepath)

File(String parent, String child)

File(File parent, String child)


2) 주요 메소드

boolean delete(): 파일을 삭제하고 결과를 리턴

boolean exists(): 파일의 존재 여부를 리턴

long length(): 파일의 크기 리턴

long lastModified(): 마지막 수정 날짜 리턴


=>클라이언트 서버 시스템에서 위의 메소드들을 이용해서 파일을 다운로드하고 삭제하고 업데이트 합니다.

=>처음 접속할 대는 존재여부만 확인해서 다운로드 하고 다음 부터는 파일이 업데이트 되었는지 확인(날짜 나 크기)하고 삭제한 후 다운로드 합니다.


실습) 파일 존재 여부 확인, 파일크기, 수정시간 출력 

import java.io.File;

public class FileMain {


public static void main(String[] args) {

//프로젝트의 img 디렉토리의 img.jpg 파일의

//정보를 확인할 수 있는 객체를 생성

File f = new File("img/img.jpg");

//파일의 정보 출력 - 존재 여부, 크기, 마지막 수정날짜

System.out.println("존재여부:" + f.exists());

System.out.println("파일크기:" + f.length());

System.out.println("수정시간:" + f.lastModified());

//c:\ 드라이브에 어떤 파일과 디렉토리가 있는지 확인

File f1 = new File("c:\\");

//list()를 활용해서 전부 출력

String [] li = f1.list();

for(String imsi : li) {

System.out.println(imsi);

}


}


}




7. Stream

=>외부 HW 나 파일 또는 네트워크와 데이터를 주고받을 수 있는 통로

1) 분류

- 방향에 따른 분류

입력 스트림: 입력을 받기 위한 스트림

출력 스트림: 출력을 위한 스트림


- 데이터에 따른 분류

바이트 스트림: 데이터를 전송된 바이트 단위 그대로 사용하는 스트림

문자 스트림: 데이터를 문자로 변환해서 사용하는 스트림



2) ByteStream

=>InputStream 과 OutputStream 이라는 추상 클래스에 공통으로 사용할 메소드의 이름을 설정


- 입력(InputStream)

int available(): 읽을 수 있는 바이트 수 리턴


int read(): 현재 위치에서 하나의 바이트를 읽어서 리턴

            못 읽으면 -1리턴

int read(byte [] b): b 만큼 읽어서 b에 저장하고 읽은 개수를 리턴

                     못 읽으면 0보다 작거나 같은 수 리턴

int read(byte [] b, int offset, int length): b에 offset 부터 length 만큼 읽어서 b에 저장하고 읽은 개수를 리턴

                     못 읽으면 0보다 작거나 같은 수 리턴

void close(): 스트림 닫기


- 출력(OutputStream)

void write(int r): r을 전송

void write(byte [] b): b를 전부 전송

void write(byte [] b, int offset, int length): b에서 offset 부터 length만큼 만 전송

void close(): 스트림 닫기

void flush(): 현재 버퍼에 남은 내용 모두 전송



3) FileInputStream & FileOutputStream

=>파일에 byte 단위로 입출력 할 수 있는 스트림

- FileOutputStream

생성자

FileOutputStream(String 파일경로)

FileOutputStream(String 파일경로, boolean 추가모드여부)

FileOutputStream(File 파일경로)

FileOutputStream(File 파일경로, boolean 추가모드여부)


- FileInputStream

생성자

FileInputStream(String 파일경로)

FileInputStream(File 파일경로)


실습) 파일을 생성하고 파일 내용 읽어오기 

package java0116;


public class Main1 {


public static void main(String[] args) {

// TODO Auto-generated method stub

// new DataWindow();

new ByteMain();

}


}



package java0116;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class ByteMain {

public static void main(String[] args) {
//파일에 바이트 단위로 기록할 수 있는 스트림을 생성
try {
//파일 스트림 객체 생성
FileOutputStream fos = new FileOutputStream("test.txt");
byte [] b = "HELLO".getBytes();
fos.write(b);

//파일 스트림 객체 닫기

fos.close();

} catch (Exception e) {

e.printStackTrace();

}

try {

FileInputStream fis = 

new FileInputStream("test.txt");

//1개 읽기

//int r = fis.read();
byte [] b = new byte[fis.available()];

fis.read(b);
System.out.println(new String(b));
fis.close();

}catch(Exception e) {

System.out.println(e.getMessage());

}

}
}



'IT > JAVA (17.12.18~)' 카테고리의 다른 글

22일 JAVA(22)  (0) 2018.01.24
21일 JAVA(21)  (0) 2018.01.23
19일 JAVA(19)  (0) 2018.01.16
18일 JAVA(18)  (0) 2018.01.12
17일 JAVA(17)  (0) 2018.01.11