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();
}
}
'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 |