** 우분투 리눅스 설치!!! 공부 스타트~~~
(1) eclipse
- Perspective : 전체화면 (window > open Perspective)
- view : perspective안의 창 하나하나를 의미
window > show view > 다시 view 띄우기
or
window : new window 초기 상태 (하나의 창만 띄우고 작업할 것!!)
Q. 순수 자바만 할 꺼면?? java developer 버전으로 다운
자바 + 웹 ? java ee 버전으로 다운
* 항상 eclipse에서 할일
1. Java Project 만들기
2. 만들고자 하는 곳에서 마우스 오른쪽 클릭 후 패키지 or 클래스 만들기
3. 패키지랑 클래스 한번에 가능(클래스 선택) - 일반적으로 이 방법으로 사용!!!!
Window > Preferences > General > Appeearance > Colors and Fonts
> Basic > Text Font > 더블클릭 후 크기 설정
Workspace > Text file encoding Other - UTF-8 (web에서 중요!! java에서는 괜찮지만 웹에서 설정 바꾸기)
delete > delete project contens on disk (해당 파일을 완전히 디스크 상에서 지울 것인가? ) --- 주의 할 것!!
Eclipse 단축키 (마우스 클릭 최소화 하기!!) |
|
window > preferences > Java > Editor > Templates에서 내가 자동완성 만들 수 있다!! |
|
ctrl + space |
자동완성 |
ctrl + 숫자1 |
오류 해결 |
ctrl + alt + 아래화살표 |
한줄(블럭) 복사 |
ctrl + d |
한줄씩 지우기 |
shift + alt + m |
블록 지정한 중복코드 알아서 찾아서 메소드 만들어줌 |
ctrl + shift + o |
자동으로 import |
ctrl + shift + r |
원하는 파일 찾기 |
ctrl + o |
해당 클래스의 메소드, 변수명 확인 |
ctrl + / |
한줄 주석 |
(블럭) ctrl + / |
블럭 주석 |
alt + up(down) |
위(아래) 줄 바꾸기 |
alt + left, alt + right |
이전, 이후 작업 화면 |
ctrl + f |
찾기 |
alt + shift + r (ctrl + f의 replace all처럼 해당파일의 같은 이름을 모두 바꾸는 것이 아니기 때문에 이름이 같은 다른 변수를 바꿀 염려가 x ) |
이름을 바꿀 변수나 클래스 선택 후 rename
|
alt + s(source) + r(getter/setter) + a(all) + r(generate) |
getter/setter 자동 완성 |
ctrl + shift + f |
코드 정리 |
ctrl + shift + g |
특정 메소드나 필드를 참조하고 있는 곳을 찾음 |
ctrl + t |
계층구조 |
ctrl + n (java 입력) |
java project or java class 생성 |
ctrl + s (반드시 저장 후 실행하기!!!) |
저장 |
ctrl +F11 |
Console 실행 |
F11 |
클래스 실행 |
alt + shift + 방향키 |
블록선택 |
ctrl + k |
해당 블럭 다음 단어 찾기 |
ctrl +shift + k |
해당 블럭 이전 단어 찾기 |
ctrl + shift + F6 |
파일 간 이동 |
ctrl + f3/o/마우스커서 |
클래스, 메소드 상세 검색 |
ctrl + h |
메소드 or 클래스의 호출위치 찾기 (프로젝트 규모가 클 때 유용) |
(2) Import
- 외부파일 복사하기
1.패키지에 오른쪽 마우스 클릭 > import > general > file System(파일만 가져옴) - 폴더나 파일은 주의할 필요 x
2. general > exising project (프로젝트 자체를 가져옴)
** 프로젝트를 import할 때 주의 : 버전이 같아야 error가 나지 않는다. 드라이브도 같은 드라이브에 이클립스가 깔려 있어야 한다.
> 해결책 : 프로젝트 오른쪽 마우스 클릭 > Build Path > configure build path > Libraries > JRE System Library[JavaSE-1.8] 선택 후 Edit > 동일한 개발환경으로 맞추기
- import 하는 방법
1.파일하나하나 하는 방법 : General > File System >
2.프로젝트 : General > Existing Projects into Workspace >
3.프로젝트 생성 후 원하는 패키지를 import
(3) Export
1. 내보내기 할 프로젝트 선택
2. 마우스 오른쪽 마우스 클릭 후 Export 클릭
3. General > Archive File > Next
4. Browse로 경로 지정
5. To archive file 파일 이름 지정
cf) 알마인드 설치, Ovenapp.io 다운로드
oracle.com > downloads > Java (JDK) for Developers > JDK 8 Demos and Samples 다운받기
swing sample > cmd > d: > cd JDK Demo가 깔린 경로 java -jar SwingSet2.jar
(4)
- Component에 Event를 발생시키고자 한다면 기능(추상 method) 설정이 필요하다.
- Event Source ? Event를 발생시킬 수 있는 Component
- Source들은 Event Listner에 등록을 해야 하고, Event의 기능은 해당 Listner에 의해서만 호출이 가능하다.
** AWT 작업 순서
1. 그림그리기
2. Component 결정 및 객체명
3. Panel 작업
4. Class 생성 (extends Frame)
5. 선언부에 2번에 해당하는 객체생성
6. 생성자에서 배치 작업(~~~~~~~~~~~~~ setVisible(true);)
--java.awt.event
Button(누를 때),TextField, List - ActionListner
Choice, Checkbox - ItemListner
Scrollbar - AdjustmentListener(특화)
Button(tab키 등으로 이동) - FocusEvent
7. Event Source 결정
8. 7에서 발생하는 XXXListener 구현 (implements XXListener,...) >> 추상 method override(기능구현)
9. 생성자의 후미(setVisible(true);) 아래에 component(Event Source)를 Event Listener에 등록해줘야 함.
es.addXXXListener(Listener의 객체);
<19.11.12.java..awt.design에 이은 event 구현>
package javaStudy;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Choice;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class ItemTest extends Frame implements ItemListener, ActionListener{
Panel pN = new Panel();
Panel pS = new Panel();
CheckboxGroup cg = new CheckboxGroup();
Checkbox mor = new Checkbox("아침", true, cg);
Checkbox aft = new Checkbox("점심", false, cg);
Checkbox eve = new Checkbox("저녁", false, cg);
Checkbox app = new Checkbox("사과", true);
Checkbox bana = new Checkbox("바나나");
Checkbox gra = new Checkbox("포도");
TextArea ta = new TextArea();
Choice ch = new Choice();
Button exit = new Button("종료");
public ItemTest() {
super("아이템 테스트!!");
pN.setLayout(new GridLayout(2, 3, 10, 10));
pN.add(mor);
pN.add(aft);
pN.add(eve);
pN.add(app);
pN.add(bana);
pN.add(gra);
pS.setLayout(new BorderLayout(10, 0));
ch.add("아침");
ch.add("점심");
ch.add("저녁");
pS.add(ch, "Center");
pS.add(exit, "East");
add(pN, "North");
add(ta, "Center");
add(pS, "South");
setBounds(300, 200, 300, 400);
setVisible(true);
//이벤트감시자 붙이기
exit.addActionListener(this);
mor.addItemListener(this);
aft.addItemListener(this);
eve.addItemListener(this);
app.addItemListener(this);
bana.addItemListener(this);
gra.addItemListener(this);
ch.addItemListener(this);
}
public static void main(String[] args) {
new ItemTest();
}
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
@Override
public void itemStateChanged(ItemEvent e) {
Object ob = e.getSource();
if (ob == ch) {
String tmp = ch.getSelectedItem();
if(tmp.equals("아침")) {
mor.setState(true);
} else if (tmp.equals("점심")) {
aft.setState(true);
} else {
eve.setState(true);
}
}
//내가 선택했던 checkbox 얻어옴
Checkbox cb = cg.getSelectedCheckbox();
String str = cb.getLabel();
// System.out.println(str);
ta.setText("===" + str + "===\n");
ta.append("1. 사과 : " + eat(app.getState()) + "\n");
ta.append("2. 바나나 : "+ eat(bana.getState()) +"\n");
ta.append("3. 포도 : "+ eat(gra.getState()));
ch.select(str);
}
private String eat(boolean flag) {
return flag ? "먹었다." : "안 먹었다.";
}
}
package javaStudy;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.List;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ListTest extends Frame implements ActionListener{
Panel pW = new Panel();
Panel pC = new Panel();
Panel pE = new Panel();
//다중선택 가능
List listR = new List(0,true);
List listL = new List(0,true);
TextField tfR = new TextField();
TextField tfL = new TextField();
Button btnR = new Button("▷");
Button btnRall = new Button("▶");
Button btnL = new Button("◁");
Button btnLall = new Button("◀");
public ListTest() {
super("리스트 테스트!!");
//listL,tfL사이에 간격 10주기
pW.setLayout(new BorderLayout(0, 10));
pW.add(listL, "Center");
pW.add(tfL, "South");
pE.setLayout(new BorderLayout(0, 10));
pE.add(listR, "Center");
pE.add(tfR, "South");
pC.setLayout(new GridLayout(6, 1, 0, 20));
pC.add(new Label());
pC.add(btnR);
pC.add(btnRall);
pC.add(btnL);
pC.add(btnLall);
setLayout(new GridLayout(1, 3, 10, 0));
add(pW);
add(pC);
add(pE);
setBounds(300, 200, 300, 400);
setVisible(true);
tfL.addActionListener(this);
tfR.addActionListener(this);
btnL.addActionListener(this);
btnLall.addActionListener(this);
btnR.addActionListener(this);
btnRall.addActionListener(this);
}
public static void main(String[] args) {
new ListTest();
}
@Override
public void actionPerformed(ActionEvent e) {
Object ob = e.getSource();
if (ob == tfL) {
// 1. tfL의 문자열 얻기
// 2. tfL 지우기
// 3. 1의 값 검사
// 4. 1의 값을 listL 추가
//trim으로 space등으로 앞,뒤 공백입력 되는 것 방지
String tmp = tfL.getText().trim();
tfL.setText("");
if(tmp.isEmpty())
return;
listL.add(tmp);
}else if(ob == tfR) {
String tmp = tfR.getText().trim();
tfR.setText("");
if(tmp.isEmpty())
return;
listR.add(tmp);
}else if(ob == btnL) {
String[] tmp = listR.getSelectedItems();
if(tmp == null)
return;
int len = tmp.length;
for(int i=0;i<len;i++) {
listL.add(tmp[i]);
}
for(int i=len-1;i>=0;i--) {
listR.remove(tmp[i]);
}
}else if(ob==btnLall) {
String tmp[] = listR.getItems();
int len = tmp.length;
for(int i=0;i<len;i++) {
listL.add(tmp[i]);
}
//removeAll()-이 method를 사용해도 되지만, util에는 x
for(int i=len-1;i>=0;i--) {
listR.remove(i);
}
}else if(ob==btnR) {
// 1. listL에서 선택한 문자열 얻기
// 2. 1의 값 검사 (항상 데이터 얻어오면 유효성 검사하기)
// 3. 1의 값을 listR에 추가
// 4. listL에서 삭제
String[] tmp = listL.getSelectedItems();
if(tmp == null)
return;
int len = tmp.length;
for(int i=0;i<len;i++) {
listR.add(tmp[i]);
}
for(int i=len-1;i>=0;i--) {
listL.remove(tmp[i]);
}
}else if(ob==btnRall) {
// 1. listL의 모든 문자열 얻기
// 2. 1의 값을 listR에 추가
// 3. listL에서 모든 문자열 삭제
String tmp[] = listL.getItems();
int len = tmp.length;
for(int i=0;i<len;i++) {
listR.add(tmp[i]);
}
for(int i=len-1;i>=0;i--) {
listL.remove(i);
}
}
}
}
package javaStudy;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.Scrollbar;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
public class ColorChooser extends Frame implements AdjustmentListener{
Panel p1 = new Panel();
Panel p11 = new Panel();
Panel p12 = new Panel();
Panel p13 = new Panel();
Panel p2 = new Panel();
Panel p21 = new Panel();
//Label.CENTER - 글자 가운데 정렬
Label lR = new Label("빨강",Label.CENTER);
Label lG = new Label("초록", Label.CENTER);
Label lB = new Label("파랑", Label.CENTER);
Scrollbar sbR = new Scrollbar(Scrollbar.HORIZONTAL, 127, 10, 0, 265);
Scrollbar sbG = new Scrollbar(Scrollbar.HORIZONTAL, 127, 10, 0, 265);
Scrollbar sbB = new Scrollbar(Scrollbar.HORIZONTAL, 127, 10, 0, 265);
Panel colorP = new Panel();
Label colorL = new Label();
Button change = new Button("변경");
public ColorChooser() {
super("색상표!!");
p11.setLayout(new BorderLayout(10, 0));
lR.setBackground(Color.RED);
p11.add(lR, "West");
p11.add(sbR, "Center");
p12.setLayout(new BorderLayout(10, 0));
lG.setBackground(Color.GREEN);
p12.add(lG, "West");
p12.add(sbG, "Center");
p13.setLayout(new BorderLayout(10, 0));
lB.setBackground(Color.BLUE);
lB.setForeground(Color.WHITE);
p13.add(lB, "West");
p13.add(sbB, "Center");
p1.setLayout(new GridLayout(5, 1, 0, 10));
p1.add(new Label());
p1.add(p11);
p1.add(p12);
p1.add(p13);
p21.setLayout(new BorderLayout(10, 0));
p21.add(colorL, "Center");
p21.add(change, "East");
p2.setLayout(new BorderLayout(0, 10));
p2.add(p21, "South");
p2.add(colorP, "Center");
setLayout(new GridLayout(1, 2, 10, 0));
add(p1);
add(p2);
setBounds(300, 200, 500, 300);
setVisible(true);
sbR.addAdjustmentListener(this);
sbG.addAdjustmentListener(this);
sbB.addAdjustmentListener(this);
changeColor();
}
public static void main(String[] args) {
new ColorChooser();
}
@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
changeColor();
}
private void changeColor() {
int r = sbR.getValue();
int g = sbG.getValue();
int b = sbB.getValue();
colorP.setBackground(new Color(r,g,b));
colorL.setText("r = "+ r + " g = " + g + " b = " + b);
}
}
package javaStudy;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class BaseBall extends Frame implements ActionListener{
//전역변수로 변수 선언하기!!
int gameCnt;
int count;
int my[];
int com[];
Panel p1 = new Panel();
Panel p2 = new Panel();
Panel p3 = new Panel();
TextArea ta = new TextArea();
TextField tf = new TextField();
Label l = new Label("숫자입력", Label.CENTER);
Button newGame = new Button("새게임");
Button answer = new Button("정답");
Button clear = new Button("지우기");
Button fontColor = new Button("글자색");
Button exit = new Button("종료");
public BaseBall() {
super("숫자 야구게임!!!");
gameCnt = 3;
my = new int[gameCnt];
com= new int[gameCnt];
p1.setLayout(new BorderLayout(10, 0));
p1.add(l, "West");
tf.setEditable(false);
p1.add(tf, "Center");
p2.setLayout(new BorderLayout(0, 10));
ta.setText("새게임 버튼을 눌러 게임을 시작하세요!!!\n ");
//setEnabled(false) - 아예 클릭도 안되게끔 막아놓음
ta.setEditable(false);
ta.setFont(new Font(Font.SANS_SERIF,Font.ITALIC,15));
p2.add(ta, "Center");
p2.add(p1, "South");
p3.setLayout(new GridLayout(5, 1, 0, 10));
p3.add(newGame);
p3.add(answer);
p3.add(clear);
p3.add(fontColor);
p3.add(exit);
setLayout(new BorderLayout(10, 0));
add(p2, "Center");
add(p3, "East");
setBounds(300, 200, 400, 300);
setVisible(true);
newGame.addActionListener(this);
answer.addActionListener(this);
clear.addActionListener(this);
fontColor.addActionListener(this);
exit.addActionListener(this);
tf.addActionListener(this);
}
private void comNansu() {
com[0] = (int) (Math.random() * 9) + 1;//1 - 9
do{
com[1] = (int) (Math.random() * 10);//0 - 9
}while(com[0] == com[1]);
do{
com[2] = (int) (Math.random() * 10);//0 - 9
}while(com[0] == com[2] || com[1] == com[2]);
System.out.println(com[0] + " " + com[1] + " " + com[2]);
}
@Override
public void actionPerformed(ActionEvent e) {
Object ob = e.getSource();
if(ob == tf) {
game();
} else if(ob == newGame) {
comNansu();
ta.setText("새로운 게임을 시작합니다.\n");
tf.setEditable(true);
} else if(ob == answer) {
String str = "";
for(int i=0;i<gameCnt;i++)
str += com[i];
ta.append("정답은 " + str + "입니다.\n" );
ta.append("새로운 게임을 시작하세요!!!\n");
tf.setEditable(false);
} else if(ob == clear) {
ta.setText("");
} else if(ob == fontColor) {
} else if(ob == exit) {
System.exit(0);
} else if(ob == tf) {
}
}
private void game() {
// 1. tf의 값을 얻기
// 2. 유효성검사(숫자, 3자리)
// 3. 1의 값을 배열로
// 4. my com 배열의 숫자, 자리수 비교
// 6. 결과 출력
//trim으로 앞,뒤 공백 꼭 지우기
String myNum = tf.getText().trim();
//비워내기 위한 공백만들기
tf.setText("");
if(myNum.length() != gameCnt) {
ta.append(gameCnt + "자리수의 숫자를 입력하세요.\n");
return;
}
//myNum이 숫자인가요?
if(!isNumber(myNum)) {
ta.append("숫자만 입력하세요.\n");
return;
}
for(int i=0;i<gameCnt;i++) {
//String값을 int 배열에 담기 위한 charAt 사용 - index에 해당하는 문자열 출력
//i = 0,1,2 (48,49,50) 그래서... -48 을 빼 준 것
my[i] = myNum.charAt(i) - 48;
//
}
int strike = 0;
int ball = 0;
for(int m=0;m<3;m++) {
for(int c=0;c<3;c++) {
if(my[m] == com[c]) {//숫자가 같다면..
if(m == c)//자리수 같다면...
strike++;
else
ball++;
}
}
}// 숫자비교 for end
if(strike != 3) {
ta.append(++count + ". " + myNum + "은 " + strike + "스트라이크 " + ball + "볼입니다.\n");
} else {
ta.append(++count + ". " + myNum + "은 정답입니다.\n");
ta.append(count + "번만에 정답!!!!\n");
ta.append("새로운 게임을 시작하세요!!!\n");
tf.setEditable(false);
//정답을 맞추는 순간 초기화
count = 0;
}
}
private boolean isNumber(String myNum) {
boolean flag = true;
int len = myNum.length();
for(int i=0;i<len;i++) {
//문자열 얻어와서 ascii code값 나옴
int num = myNum.charAt(i);
if(num < 48 || num > 57) {
flag = false;
break;
}
}
return flag;
}
public static void main(String[] args) {
new BaseBall();
}
}