** 우분투 리눅스 설치!!! 공부 스타트~~~

 

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

+ Recent posts