http://docs.oracle.com/javafx/2/get_started/css.htm
이 튜토리얼은 JavaFX 어플리케이션에 CSS(Cascading Style Sheet)를 적용하여 더 예쁘고 매력적으로 보이게 하는 방법을 설명합니다. 디자인을 만들고 .css 파일을 생성한 다음 이 스타일을 적용하면 됩니다.
이 튜토리얼에서는 전 글에서 만들었던 로그인 폼의 기본 스타일에서 시작합니다. 몇몇 간단한 CSS 수정만으로 아래 그림과 같이 외관을 확 바꿀 수 있습니다.
프로젝트의 생성
앞의 튜토리얼을 계속 따라서 해보았다면 이미 Login이라는 프로젝트를 가지고 계실 겁니다. 만일 가지고 있지 않다면 Login.zip 파일을 다운로드 받아 압축을 풀고 Netbeans IDE에서 불러들이면 됩니다.
CSS 파일 만들기
먼저 해야 할 일은 새로운 CSS파일을 만들고 그것을 어플리케이션의 메인 클래스와 같은 디렉토리에 저장하는 것입니다. 다음으로 새로만든 CSS를 JavaFX 어플리케이션이 사용하도록 지정해야 합니다. 다음 순서대로 하세요.
- NetBeans IDE 프로젝트 창에서 Login 프로젝트의 트리 노드를 열어서 Source Packages 디렉토리 노드를 선택합니다.
- Source Packages 아래의 login 폴더에 오른쪽 버튼을 클릭하고 New -> Other를 선택합니다.
- New File 다이얼로그에서 Other를 선택하고 Cascading Style Sheet를 선택한 다음 Next를 클릭합니다.
- 파일명은 Login으로 하되 저장되는 디렉토리가 src/login인지 확인합니다.
- Finish를 클릭합니다.
- Login.java 파일에서 조금전에 만든 css파일을 읽어들이고 Scene에 적용하는 코드를 다음과 같이 추가합니다.
Scene scene = new Scene(grid, 300, 275); primaryStage.setScene(scene);scene.getStylesheets().add
(Login.class.getResource("Login.css").toExternalForm());
primaryStage.show();
배경 이미지 추가하기
다이얼로그에 예쁜 배경 이미지를 깔면 보다 근사하게 보일 수 있습니다. 이 튜토리얼에서는 회색톤의 린넨 질감의 배경 이미지를 사용합니다.
먼저 배경 이미지를 여기서 다운로드 받습니다. 그리고 이것을 src/login 폴더에 복사를 복사합니다. 그리고 다음과 같이 CSS파일에 background-image 속성을 추가합니다. 명심해야 할 것은 리소스 파일의 경로는 CSS파일 위치에서의 상대경로로 지정한다는 점입니다. 이 경우 background.jpg 파일이 Login.css파일과 같은 디렉토리에 있는 경우입니다.
.root { -fx-background-image: url("background.jpg"); }
아래 그림은 스타일이 적용된 결과를 보여줍니다.
라벨의 스타일 정하기
다음으로 개선시켜야 할 컨트롤은 라벨들입니다. 이를 위해 당신은 .label 스타일 클래스를 사용할 겁니다. 이렇게 하면 폼에 있는 모든 라벨에 반영이 됩니다. 다음과 같이 CSS파일에 추가합니다.
.label { -fx-font-size: 12px; -fx-font-weight: bold; -fx-text-fill: #333333; -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); }
스타일이 적용된 결과는 아래와 같습니다.
텍스트에 스타일 입히기
이제 폼에 있는 두개의 Text 객체에 대해 스타일을 입혀볼 차례입니다. 하나는 "Welcome" 이라는 내용을 가진 scenetitle 객체이고, 다른 하나는 "Sign in" 버튼을 클릭했을 때 피드백을 보여주는 actiontarget이라는 객체입니다. 당신은 이 두개의 객체에 다른 스타일을 적용할 수 있습니다.
먼저 Login.java 파일에서 아래와 같은 두 줄의 인라인 스타일 지정 구문을 제거합니다.
scenetitle.setFont(Font.font(“Tahoma”, FontWeight.NORMAL, 20));
actiontarget.setFill(Color.FIREBRICK);
그리고 각 텍스트 객체에 setID() 메쏘드를 이용하여 ID를 부여합니다. 이렇게 해야 CSS파일에서 ID별로 다른 스타일을 지정할 수 있습니다.
scenetitle.setId("welcome-text");
actiontarget.setId("actiontarget");
#welcome-text { -fx-font-size: 32px; -fx-font-family: "Arial Black"; -fx-fill: #818181; -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 ); } #actiontarget { -fx-fill: FIREBRICK; -fx-font-weight: bold; -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); }
actiontarget에 대한 스타일은 앞서 코드로 작성했던 것과 유사합니다. 이렇게 CSS를 적용한 결과는 다음과 같습니다.
버튼에 스타일 입히기
다음으로 버튼에 스타일을 입혀봅니다. 특히 마우스 커서가 버튼 위로 올라갔을 때 인지할 수 있도록 hover에 대한 스타일을 지정해 봅니다.
먼저 다음과 같이 버튼 일반에 대한 스타일을 지정합니다. 이 코드는 .button 스타일 클래스를 사용하므로 폼에 사용된 모든 버튼에 적용됩니다.
.button { -fx-text-fill: white; -fx-font-family: "Arial Narrow"; -fx-font-weight: bold; -fx-background-color: linear-gradient(#61a2b1, #2A5058); -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 ); }
.button:hover { -fx-background-color: linear-gradient(#2A5058, #61a2b1); }
이제 로그인 다이얼로그를 근사하게 완성했습니다. 아래와 같은 모양입니다.
참고할 만한 자료들
CSS에 관련된 다음과 같은 자료들을 추가적으로 확인해 보세요.
- Skinning JavaFX Application with CSS
- Styling Charts with CSS
- JavaFX CSS Reference Guide
- Skinning with CSS and CSS Analyzer
- Styling FX Buttons with CSS
댓글 없음:
댓글 쓰기