라벨이 코드 스니펫인 게시물 표시

안드로이드 액션바에 오버플로 메뉴 강제하기

안드로이드에 하드웨어 메뉴키가 있는 경우에는 메뉴가 액션바의 오른쪽 끝에 오버플로 메뉴가 뜨지 않고 대신에 메뉴키를 눌렀을 때에만 화면의 아래쪽에서 빼꼼히 뜬다. 이건 디자인의 통일성에 있어서 좀 문제가 있다. 아래의 코드를 onCreate() 메서드 안에 삽입하면 하드웨어 메뉴키가 있는 경우에도 액션바에 오버플로 메뉴 형태로 표시되게 강제할 수 있다. 물론 메뉴키를 누르면 오버플로 버튼을 클릭한 것처럼 화면의 우측상단에 메뉴 목록이 나타난다. // 하드웨어 메뉴키가 있더라도 액션바의 오버플로 메뉴를 사용하도록 강제한다. try   {   ViewConfiguration config = ViewConfiguration.   get (   this );   Field menuKeyField = ViewConfiguration. class   .getDeclaredField(   "sHasPermanentMenuKey" );    if   (menuKeyField !=  null ) {      menuKeyField.setAccessible(   true   );      menuKeyField.setBoolean(config,  false   );   } }  catch   (Exception ex) {   ; } 단, 기본 액션바에서만 되고, 콤팻이나 셜록 액션바에서는 안되는 듯 하다. ( http://stackoverflow.com/a/11438245 )

문자열의 길이 계산

paint()메서드 안에서 문자열을 그릴 때, 해당 문자열의 크기를 얻어오는 방법. 1 Graphics2D g = ( Graphics2D ) graphics ; 2 3 g . drawString ( str , x , y ); 4 5 int width = g . getFontMetrics (). stringWidth ( str ); 6 int height = g . getFontMetrics (). getHeight (); 7 8 g . dispose ();

Swing Launcher

main() 함수에서 다음과 같은 방식으로 JFrame등을 실행시킬 수 있다. 1 SwingUtilities . invokeLater ( new Runnable (){ 2 public void run () { 3 JFrame win = new JFrame (); 4 win . pack (); 5 win . setVisible ( true ); 6 } 7 });

OSX에서의 Swing

자바로 구현된 스윙 어플리케이션을 맥 OSX에서 구동하는 경우, 시스템 룩앤필을 적용하는 것만으로는 뭔가 아쉽다는 것을 깨달았다. 윈도우즈나 리눅스와 달리 OSX에서는 메뉴바가 화면 위에 있다거나 해서 좀 더 손 봐줘야 할 곳이 있다. 아래 링크된 사이트의 몇 가지 항목을 번역해 두기로 한다. http://www.devdaily.com/apple/mac/java-mac-native-look/ https://developer.apple.com/library/mac/#documentation/Java/Conceptual/Java14Development/04-JavaUIToolkits/JavaUIToolkits.html#//apple_ref/doc/uid/TP40001901-SW1 시스템이 OSX인지를 판별 String lcOSName = System . getProperty ( "os.name" ). toLowerCase (); boolean IS_MAC = lcOSName . startsWith ( "mac os x" ); 시스템 룩앤필을 적용 UIManager . setLookAndFeel ( UIManager . getSystemLookAndFeelClassName ()); 메뉴바를 화면 맨 위로 이동 System . setProperty ( "apple.laf.useScreenMenuBar" , "true" ); 메뉴바에 패키지명 대신 어플리케이션 이름을 지정 System . setProperty ( "com.apple.mrj.application.apple.menu.about.name" , "어플리케이션명" ); 독 바 아이콘을 지정하려한다거나 보다 자세한 내용이 필요한 경우에는 원문을 참조하기 바란다.

Jar 패키지 안의 파일을 이용하기

이미지 파일 혹은 텍스트 파일을 Jar 패키지 안에 포함시켜 놓고 소스 코드에서 해당 파일에 접근해서 읽는 방법이다.  해당 경로에 필요한 파일을 복사해 두는 것을 잊지 말것! 이미지 파일 1 URL urlImage = getClass (). getResource ( "kr/pe/elex/images/imageFile.png" ); 2 myImage = Toolkit . getDefaultToolkit (). getImage ( urlImage ); 3 //혹은 4 //myImage = ImageIO.read(urlImage); 텍스트 파일 1 JarFile jarFile = new JarFile ( getClass (). getProtectionDomain (). getCodeSource (). getLocation (). toURI ()); 2 JarEntry entry = jarFile . getJarEntry ( "kr/pe/elex/files/textFile.txt" ); 3 InputStreamReader input = new InputStreamReader ( jarFile . getInputStream ( entry ) );

스윙에서 데스크탑의 브라우저 실행하기

버튼 등에서 이벤트를 받아서 임의의 URL로 이동하는 브라우저를 띄우려거든 리스너에 다음과 같이 구현한다. 1 public void actionPerformed ( ActionEvent e ) { 2 try { 3 Desktop . getDesktop (). browse ( new java . net . URI ( "www.elex.pe.kr" )); 4 } catch ( IOException e1 ) { 5 e1 . printStackTrace (); 6 } catch ( URISyntaxException e1 ) { 7 e1 . printStackTrace (); 8 } 9 }