자바로 GUI를 만들때 로그창을 JTextArea로 만들려면1, JTextArea가 스크롤 가능하게하고2. 로그가 발생하면 JTextArea 뒤에 내용을 붙이고 스크롤을 맨 아래로 내리면 된다. 1. JTextArea에 스크롤 넣기: 자바 JTextArea에 스크롤을 넣는 방법은, JScrollPane안에 JTextArea를 넣으면 된다.JTextArea txtLog = new JTextArea();JScrollPane scrollPane = new JScrollPane(txtLog);contentPane.add(scrollPane); * 주의 : JTextArea.setPreferredSize를 설정하면 스크롤바가 생기지 않는다. 2. JTextArea에 내용 붙여넣기 + 맨 아래로 스크롤하기 : JT..
빈 공백의 Border를 설정함으로써 내부 공백을 띄울 수 있다. JPanel pane = new JPanel();pane.setBorder(BorderFactory.createEmptyBorder(10 , 10 , 10 , 10); //상하좌우 10씩 띄우기 Border javax.swing.BorderFactory.createEmptyBorder(int top, int left, int bottom, int right) createEmptyBorderpublic static Border createEmptyBorder(int top, int left, int bottom, int right) Creates an empty border that takes up space but which does no..
[안드로이드] 검색 기능 구현하기(SearchableActivity) 안드로이드의 내장되어있는 검색 기능을 사용하는 방법을 알아보자. 안드로이드에서 제공하는 검색 기능을 이용하는 방법은 크게 2가지가 있는데 1) 기본적으로 내장되어있는 Search dialog를 이용하는 방법2) SearchView를 이용하는 방법. 2번이 좀더 디자인에 융화되고 다양한 구현을 가능하게 하지만 Android SDK 3.0 (11 version)의 이후 버전에서만 사용이 가능하다. 따라서 좀더 넓은 호환성을 가지려면 1번을 이용하면 되고, 좀더 다양한 인터페이스를 구현하고자 한다면 2번대로 하면 될 것이다.그 외 직접 EditText를 만들어서 키 입력마다 필터링을 하는 방법도 있는데 일단은 검색기능만 알아보자.이번에는 1..
이 에러가 나는 것은 컴파일을 할때 최신 버전의 자바로 컴파일을 하고실행할때 이전의 자바로 실행을 하려고 할때 일어난다.예를 들면 자바 1.7로 컴파일을 하고나서자바 1.6으로 실행하려고 한다면 이 에러가 일어난다.따라서 class 파일들을 지우고 이전 버전의 자바로 컴파일을 하거나지금 실행하는 자바를 최신버전으로 업데이트해야한다.팀 프로젝트를 하는 경우에 자주 일어나므로 처음부터 작업할 컴파일러를 정해두는것이 속편하다. 끝
AndroidManifest.xml 파일 안에 해당하는 Activity 태그 안에android:windowSoftInputMode="adjustResize"를 넣어주면 키보드가 나왔을때 화면 사이즈가 재조정 된다.키보드의 바로 위에 메신저와 같이 EditText의 입력 박스를 유지하고 싶으면EditText 위에 있는 내용을 ScrollView에 넣으면 키보드 위에 EditText는 항상 유지되고나머지는 키보드의 유무에 따라 사이즈가 변한다. 끝.
구글 앱 엔진에 올리는 경우 어드민 화면이 있어서 Datastore에서 무엇이 돌아가는지 보기 쉬운 반면 로컬에서는 보기가 힘들다. 이런 경우 로컬에서도 Datastore를 확인할 수 있는 어드민 페이지가 있다. 구글 앱 엔진을 로컬에서 실행하고나서 로컬에서 http://localhost:8888/_ah/admin 로 어드민 페이지를 들어갈 수 있다. Datastore를 확인할 수 없어서 불편했는데 의외로 좋은 기능이다. 끝.
JDO를 사용하면서 pm.deletePersistent(user); 를 할때 발생하는 에러. 이 에러는 user 객체가 Persistent로 binding되어있지 않은 상태라서 일어나는 에러이다. 따라서 PersistentManager로 binding시켜주고 삭제하면 된다. user = pm.getObjectById(User.class , user.getKey()); pm.deletePersistent(user); 끝.
1. GWT와 GAE를 연동시킨다. [GWT / GAE] Google Web Toolkit 와 Google App Engine 연동하기, 구글 서버에 올리기* 위의 페이지의 5번에서 transactions-optional을 설정했는지 확인한다. 다른 이름도 가능하지만 아래의 2번과 이름이 같아야한다. 2. PersistenceManagerFactory 객체를 만든다 - 아래와 같은 간단한 인터페이스를 만들어두면 좋다. public final class PMF { private static final PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional"); private PMF..
JDO를 사용하기 위해서는 일단 JDO에서 사용하는 PersistentCapable한 객체를 만들어야한다. 다음 단계들을 거치면 만들수 있다. 1. 클래스 위에 @PersistenceCapable 을 설정 @PersistenceCapable public class User{ //.... } 2. 저장하고자하는 각 변수 위에 @Persistent 을 설정 @PersistenceCapable public class User{ @Persistent private String name; //setter/getter 생략 } * Persistent가 될수 있는 변수의 종류는 다음과 같으니 고려해가면서 JDO를 디자인하자. Datastore가 지원하는 기본 데이터형 @PersistenceCapable 을 설정한 객..
[자바] InputStream을 String으로 변환하기 private static String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOExceptio..
[자바] String을 URL 인코딩하기 URL 뒤에 데이터를 덧붙이고자 할때 스트링을 URL에 맞게 인코딩을 해야하는데 아래와 같이 하면 된다. String encodeResult = URLEncoder.encode(String encodingString, String charsetName); 그냥 URLEncoder.encode(String s); 는 deprecated 되었으니까 사용하지 말고 위의 함수를 사용하자. charsetName에는 "UTF-8"과 같은 캐릭터 인코딩 셋을 넣으면 된다. 반대로 디코딩하는 것은 아래와 같이 하면 된다. String decodeResult = URLDecoder.decode(String decodingString, String charsetName); 끝.
안드로이드에서 Activity간 상관없는 전역 변수를 만드는 방법을 살펴보자. 크게 두 가지 방법이 있는데, 1. android.app.Application을 이용하는 방법 2. Singleton 디자인 패턴을 이용하는 방법 Activity에서 접근해야한다면 전자를 사용하는 것이 낫고, 그 외의 Provider나 다른 곳에서 접근해야하는 데이터면 후자가 나을것이다. 하지만 후자의 경우 메모리가 모자라면 static 변수들을 메모리에서 제거할 것이다. 이런 경우 onSaveInstatnceState(Bundle) 을 통해서 싱글콘을 따로 저장시켜야하는 추가 작업이 필요하다. 1. Android.app.Application을 이용하는 방법 1) Application을 상속받는 클래스를 만든다. (예제는 Pr..
1. RemoteService 클래스 위에 @RemoteServiceRelativePath("서블릿경로")를 설정했나? * 위의 "서블릿경로"는 해당하는 서블릿의 URL을 넣으면 된다. web.xml에서 설정했던 값대로하면 된다. 2. war/WEB-INF/web.xml에 맞게 매핑을 했나? 서블릿명(같아야함) 사용하는패키지.UserServiceImpl 서블릿명(같아야함) /사용할매핑 * 서블릿명이 두개가 같은지, 패키지가 맞는지 확인, 3. 구글에서 언급된 내용. 참고: http://code.google.com/p/google-web-toolkit-doc-1-4/wiki/DevGuideImplementingServices com.google.gwt.user.client.rpc.ServiceDefTarg..
이번에는 GWT와 GAE를 연동시키면서 RPC로 구글 서버에 있는 함수에 접근하는 방법을 알아보자. 1. GWT와 GAE를 연동시켜놓기 [GWT / GAE] Google Web Toolkit 와 Google App Engine 연동하기, 구글 서버에 올리기 2. 주고받을 유저 클래스를 만든다. * Serializable을 상속받아야한다. public class WGLM_User implements java.io.Serializable{ /** * */ private static final long serialVersionUID = -2003200417167457992L; public static final ProvidesKey KEY_PROVIDER = new ProvidesKey() { @Overrid..
1. 구글 앱 엔진 계정을 만든다. https://appengine.google.com/ 2. 구글 앱 엔진/구글 웹 툴킷을 다운 받아서 설치한다. http://code.google.com/appengine/docs/java/tools/eclipse.html 3. 이클립스에서 New > Web Application Project를 선택 (구글 아이콘 모양) 4. 프로젝트/war/WEB-INF/appengine-web.xml 파일 수정 unikys 1 5. 프로젝트/src/META-INF/jdoconfig.xml안에 transactions-optional 이 설정되었는지 본다. (JDO requirement) 6. 테스트로 실행, Run as > Web Application (구글 아이콘), 브라우저에 G..
getViewTypeCount는 itemCount나 ViewCount가 아니라 'Type' Count 이니까 사용하는 데이터의 종류의 카운트를 하면 된다. 보통 1가지 데이터를 종류를 많이 사용하므로 간단하게 public int getViewTypeCount() { return 1; } 만해줘도 해결된다. 경우에 따라서 레퍼런스를 보고 다르게 설정하면 된다. 끝.
[안드로이드] Sending data from an Activity to another Activity 가장 쉬운 방법은 보내고자 하는 Object에 implements java.io.Serializable 하고 ID생성해주고 Intent intent = new Intent(this , NewActivity.class); intent.putExtra("ObjectName" , serializedObject); startActivity(intent); 끝. 하지만 이건 성능상 약간 느리다고 한다. 약간 더 많은 작업이 필요하지만 성능이 좋은건 Serializable 대신에 Parcelable을 사용하는 것이. class MyObject implements Parcelable { private int dat..
Adapter상의 데이터를 수정하고나서 화면의 데이터도 같이 수정하고 싶을때 해결하는 방법. 1. ArrayAdapter를 사용하는 경우, add(), insert(), remove() 함수만 사용하기 - Observer를 설정했다면 notifyDataSetChanged() 2. CursorAdapter를 사용하는 경우, Cursor에 requery() 3. 최후의 방법 : setListAdapter(listAdapter) 다시 설정하기. 끝.
레퍼런스 : http://stackoverflow.com/questions/2657394/google-app-engine-poor-performance-with-jdo-datastore 구글 앱 엔진을 쓸때에는 데이터베이스에 접근하는 횟수를 최소화 해야한다. 이를위해 key를 가지고 어떠한 목록을 가져올때에 contains()를 쓰면 한번의 순환으로 데이터를 가져올수가 있다. List userKeyList = fetchUserKeys(); Query query = new Query(User.class , ":p.contains(key)"); query.execute(userKeyList); - JDO는 조인이 안되고 리스트를 써서 1:N이나 1:1. N:N 관계를 처리하는 것이 좋다. 참고 : http:..
* XML을 사용하고자하는 액티비티 안에서. LayoutInflater inflater = activity.getLayoutInflater(); View view = inflater.inflate(R.layout.VIEW_ID , null /*ROOT_GROUP*/); * 이후 view를 추가하든 subview로 쓰든 하면 된다. 커스텀 ExpandableListView를 사용할때 용이하다. 끝.
1. 프로그래밍으로 없애기 requestWindowFeature(Window.FEATURE_NO_TITLE); * 주의 : 어떠한 Context를 View에 설정하기 전에 먼저 실행해야한다. 2. XML 고쳐서 없애기 * AndroidManifest.xml 파일을 열고 없애고자 하는 Activity 안에다가 다음의 property를 추가 * xml에서 고치니까 기본 테마가 바뀐다. (이미 일일이 수동으로 설정하고 있다면 상관없을듯 하다) 끝.
- Total
- Today
- Yesterday
- Writing
- 샷
- 안드로이드
- 삼식이
- 속깊은 자바스크립트 강좌
- mini project
- 서울
- lecture
- ny-school
- google app engine
- gre
- TIP
- Android
- HTML5
- c++
- java
- php
- GX-10
- HTML5 튜토리얼
- 자바스크립트
- 사진
- Python
- 안드로이드 앱 개발 기초
- Javascript
- 강좌
- 탐론 17-50
- 팁
- 뽐뿌
- gae
- K100D
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |