자바

반응형




현재 프로젝트에 lib 폴더가 있고 start.exe 파일을 참조하게 하고 싶다면



File path = new  File("lib"+File.separator+"start.exe");



이렇게 해주면 된다.

그런데 프로젝트 실행할 땐 잘되는데 실행가능한 jar 파일로 export 하여 해보니 안된다..ㅠㅠ



반응형
반응형




자바 스윙에서 JTextArea 에서 스크롤바 자동으로 설정하는 방법


1
2
3
4
5
6
JTextArea area= new JTextArea();
JScrollPane scrollPane = new JScrollPane(area);  //스크롤판 추가
JPane.add(scrollPane); //화면에 추가
 
area.append(log);  // 출력로그 JTextArea 출력
area.setCaretPosition(txtLog.getDocument().getLength());  // 이 코드를 append 밑에 추가해주면 항상 아래로 스크롤 된다
cs


반응형
반응형




자바 스윙에서 JPasswordField 필드를 사용하면 암호입력시 * 별표로 표시할 수 있는데 이 가려지 값을 가져오는 방법



tf_pw = new JPasswordField();       
tf_pw.setEchoChar('*');



이런 식으로 암호 입력시 * 별표로 가려지게 한다음



 String pw = "";
  
//tf_pw 필드에서 패스워드를 얻어옴, char[] 배열에 저장
char[] secret_pw = tf_pw.getPassword(); 

//secret_pw 배열에 저장된 암호의 자릿수 만큼 for문 돌리면서 cha 에 한 글자씩 저장
     for(char cha : secret_pw){         
         Character.toString(cha);       //cha 에 저장된 값 string으로 변환
       //pw 에 저장하기, pw 에 값이 비어있으면 저장, 값이 있으면 이어서 저장하는 삼항연산자
         pw += (pw.equals("")) ? ""+cha+"" : ""+cha+"";   
     }



이렇게 저장한 후 System.out.println(pw)로 찍어보면 입력된 암호가 나타난다.



반응형
반응형


해당링크

http://dextto.tistory.com/180



핵심 키워드 \D+


문자열 배려 첫번째는 공백이므로 split[1] 값 부터 사용하기


특히 특수문자 검색할 땐 앞에 백슬래쉬 요거 \ 추가하기


ex) ""이름"" ( 에러뜸 ) ▶ "\"이름\"" ( 따옴표도 검색가능 )


반응형
반응형




파일 I/O를 이용한 텍스트 파일 생성과 읽기를 이용한 간단한 누적시간계산하기


1. 처음 시간과 끝 시간을 구한 후

-> 끝 시간 - 처음 시간 = 총 소요시간


2. 텍스트 파일 유무를 체크 한 뒤


3.파일이 없다면(처음 기록하는 시간이므로) 총 누적시간 = 총 소요시간이므로 이 시간을 totaltime.txt에 기록


4. 만약 파일이 있었다면 총 누적시간 = 이전 누적시간 + 총 소요시간이다.

-이를 다시 totaltime.txt 기록한다.(덮어 쓰게 됨)


이런 순서로 진행된다.


Time.java


import java.io.*;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Time {
	static Date dt = new Date();
	static Time timer = new Time();
	static SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd, hh:mm:ss a");
	static int playTimeCheck = 0;

	public long startTime() {
		
		long start = System.currentTimeMillis();
		return start;
	}
	 
	public long endTime() {
		long end = System.currentTimeMillis();
		return end;
	}
	
	public long playTime(long l){
		long longTime = 0;
			long end = timer.endTime();  		//끝 시간 
			longTime = ( end - l ) / 1000; 		//끝 시간 빼기 처음시간
			playTimeCheck = (int)longTime; 		// 플레이 시간 저장
			System.out.println("플레이 시간 : " + (int)(longTime / 3600) + "시간  " + (int)(longTime % 3600 / 60) + "분  " + (int)(longTime % 3600 % 60) + "초");
		return longTime;
	}
	public void totalTime(){
		
		int total = 0;
		try {
			int play = playTimeCheck; 				//아까 계산한 플레이 시간 값
			File file = new File("c:/totaltime.txt");
			if(file.isFile()){						//totaltime.txt 존재 유무 체크
				BufferedReader outReader = new BufferedReader(new FileReader("c:/totaltime.txt")); 
				String read = outReader.readLine();	//누적 시간 읽기
				total = Integer.parseInt(read);		//읽은 값 total에 저장
				total += play;						//play시간과 total 더함
				outReader.close();
				BufferedWriter out = new BufferedWriter(new FileWriter("c:/totaltime.txt"));
				out.write(Integer.toString(total));	//합산된 total 값을 기록
				out.close();
			}else{									//파일이 없다면
				BufferedWriter out = new BufferedWriter(new FileWriter("c:/totaltime.txt"));
				total = play;						//처음에는 play시간이 곧 누적시간이므로 total에 play시간 대입
				out.write(Integer.toString(total));	//파일에 기록
				out.close();
			}
			
			System.out.println("누적 플레이 시간 : " + ( total / 3600) + "시간  " + (total % 3600 / 60) + "분  " + (total % 3600 % 60) + "초");
			
						
		} catch (IOException e) {
			System.err.println(e); // 에러가 있다면 메시지 출력
			System.exit(1);
		}
	}
	
}


이를 응용하여 예를 들면

public class TimeTest {

	public Time time = new Time();  //Time.java 객체선언
	long startTime = 0;
	long endTime = 0;
	
	public void setUpGame() {
		
		startTime = time.startTime();  //시작과 동시에 시작시간 구함
	
	}

	

	private void startPlaying() {
	
		finishGame();
	}

	

	private void finishGame() {
		exitGame();					//끝날 때 시간 구함
	}
	
	private void exitGame() {
		System.out.println("게임 종료");
		time.totalTime();			//누적시간 계산 후 출력
			
		}
			

	public static void main(String[] args) {
		DotComBust game = new DotComBust();
		game.setUpGame();
		game.startPlaying();
	}
}





대강 이런 식으로 사용가능하다..





반응형

'지식메모 > JAVA' 카테고리의 다른 글

JAVA JPasswordField 암호 값 가져오기  (0) 2015.09.20
문자열에서 숫자만 추출하기  (0) 2015.09.02
숫자 천단위 콤마 입력하기  (0) 2014.09.25
Json의 이해  (0) 2013.11.05
대문자 소문자 서로 변환하기  (0) 2013.10.08
반응형




가격 입력할 때 천단위 마다 콤마를 넣을 수 있는 방법



String money="999999999"
long value = Long.parseLong(money);
DecimalFormat format = new DecimalFormat("###,###");//콤마
format.format(value);
String result_int = format.format(value);



이 코드를 추가해주면 천 단위마다 콤마가 자동으로 찍힌다.


안드로이드에서 에디트 텍스트에서 숫자를 입력 받아


텍스트 뷰에 result_int 값을 출력시켜 사용하였다.

반응형
반응형


구분자를 지정하여 하나 이상의 값을 구분하여 데이터를 배열에 집어넣고 그 값을 꺼내 사용한다.


쿼리를 날릴때 조건이 두 가지가 있을때 사용하였다.



public static splitFunction(String ktype){     //ktype을 받는다.


	String ktypeWhere = "";     		//ktypeWhere는 공백상태

	String[] array = ktype.split(",");     //콤마 구분자로 배열에 ktype저장

	for(String cha : array){      //배열 갯수만큼 포문이 돌아간다.

	/* ktypeWhere가 비어있다면 ktypeWhere 에 cha 값을 넣고 비어있지 않다면
	*  기존 값에 ,를 추가하여 cha를 덧붙인다.
	*/
	ktypeWhere += (ktypeWhere.equals("")) ? "'"+cha+"'" : ",'"+cha+"'";
			
	}
}

주석 설명대로 처음에 String ktype을 받는다. 


만약 사과를 받았다면 "사과" 값이 하나 들어가지만 


사과 포도를 받았다면 "사과,포도" 라고 값이 들어간다.



, 콤마로 구분자를 주었다면 입력할때도,콤마를 꼭 넣어주어야 한다.

그냥 "사과 포도" 이렇게 써도 자동으로 콤마가 들어가지않는다.

"사과,포도"야 구분이 가능하다.



그러면


String[] array = ktype.split(","); 


여기서 split 이라는 함수가 , 를 구분자로 인식해서 


String[] array라는 배열에 0번째부터 사과 1번째에는 포도라고 저장한다.



그 다음 포문을 돌리는데 조건문이

for(String cha : array) 이므로

array 갯수만큼 포문을 돈다.


현재 사과 포도 2개가 있으므로 2번 돌게 된다.



그럼 삼항연산자를 이용해서


ktypeWhere += (ktypeWhere.equals("")) ? "'"+cha+"'" : ",'"+cha+"'";값을 넣어준다.

처음에 String ktypeWhere = ""; 이라고 선언했으니 비어있는 상태다.


 ktypeWhere.equals("") ? "'"+cha+"'" : ",'"+cha+"'" ;

ktypeWhere가 값이 ""이므로 비어있다면 ? cha 값을 ktypeWhere에 넣어주고 : 안 비어있다면 ,를 붙여 cha값을 추가한다.;


삼항연산자는 


조건문 ? 만족할때 실행 : 만족못할때 실행

이런 형식이다.


만약 if문으로 한다면


if(ktypeWhere.equals("")){
	ktypeWhere = cha;
}else{
	ktypeWhere +=  ","+cha;
}


이렇게 될 것이다.(맞나?)


그럼 사과 포도 데이터가 2개 있으니 처음 포문을 돌때는 ktypeWhere가 값이 비어있으니


ktypeWhere = "사과" 이다.



두번째 포문을 돌때는 이미 사과가 들어가 있으므로 ,를 이용해서 붙인다.


그래서 ktypeWhere = "사과,포도"이다.



그리고 쿼리에 넣을때는 ' '표시를 해줘야 하기 때문에 "'"+ 이 구문을 넣어주었다.

쿼리 쓸 일이 아니라면 안 넣어줘도 된다.



그런 다음 ktypeWhere 값을 갖다 쓰면된다.











반응형

'지식메모 > JAVA' 카테고리의 다른 글

숫자 천단위 콤마 입력하기  (0) 2014.09.25
Json의 이해  (0) 2013.11.05
대문자 소문자 서로 변환하기  (0) 2013.10.08
ObjectNode 와 JsonNode 차이?  (0) 2013.09.06
mp3 ID3 v2 태그 파싱하기  (3) 2013.08.27
반응형



스피너를 이용하여 값을 전달한 후 값에 따른 이미지를 출력하였다.

string.xml에 스피너에 쓰일 목록을 만들어둔다.



<string name="season">시즌</string>
    
    <string name="season_prompt">시즌 선택</string>
    <string-array name="season_array">
        <item>봄</item>
        <item>여름</item>
        <item>가을</item>
        <item>겨울</item>
    </string-array>



그 다음 send.xml



 <Spinner 
         android:id="@+id/spinner_season" <!--스피너 아이디-->
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:prompt="@string/season_prompt"<!-- string.xml에서 작성한 목록 -->
         android:layout_marginRight="10dp"
          />




이렇게 스피너를 만들어준다.



그리고 SendActivity.java 에서 스피너 값을  보내주자 OnCreate 부분에


Spinner spinner = (Spinner)findViewById(R.id.spinner_season);//send.xml의 스피너 아이디
		
		ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.season_array,
				android.R.layout.simple_spinner_item);
		
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		spinner.setAdapter(adapter);



이렇게 스피너를 선언해주고 Onclick메소드에 스피너 값을 인텐트에 태워 보낸다.


String str_season = spinner.getSelectedItem().toString();	
	 	
 Intent it3 = new Intent(this,ReceiveActivity.class);
			 
	 
			 
 it3.putExtra("it3_season", str_season);	//it3_season 이라는 스트링으로 str_season 값을 넘긴다.	 
 
startActivity(it3);





이제 스피너 값에 따른 이미지를 출력하기 위해 receive.xml 에

이미지 뷰를 만들었다


  <ImageView
       android:id="@+id/season_year"
       		
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"     
                      
       />




이제 ReceiveActivity.java 에서 받아보자.

마찬가지로 OnCreate 부분에



Intent it3=getIntent();		//인텐트를 받아오고
		
		String str_season= it3.getStringExtra("it3_season"); //it3_season으로 보내온 값을 str_season에 저장
		
		ImageView season = (ImageView)findViewById(R.id.season_year); //사진을 출력할 이미지뷰
		if(str_season.equals("봄")){ //str_season 값이 봄이라면
			BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.spring); //봄 사진 가져와서
			season.setImageDrawable(img_season);//봄 사진 출력
		}else if(str_season.equals("여름")){
			BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.summer);
			season.setImageDrawable(img_season);
		}else if(str_season.equals("겨울")){
			BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.autumn);
			season.setImageDrawable(img_season);
		}else if(str_season.equals("가을")){
			BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.winter);
			season.setImageDrawable(img_season);
		}



여기서 애를 먹었던게 if 값을 그냥 평소 하던대로

if(str_season == "봄") 이런식으로 해줬는데 안되서 찾아보니까 String 값은

str_season.equals("봄")  

이런식으로 해줘야 했다.


이제 스피너로 봄 값이 넘어오면 이미지뷰에 봄 사진을 넣어주고 여름이면 여름사진을 보여준다.

아 소스코드 태그 은근 귀찮네..



반응형

+ Recent posts