2016-12-14 2 views
0

JavaFX에서 계산기를 만들고 있습니다. 나는 fx : ID #labelResult이라는 레이블을 CSS 스타일로 사용합니다. 이제 키보드 수신기를 메인 창에 추가했습니다. 그래서 내가 누를 때 왼쪽/오른쪽 화살표 키를 #labelResult의 배경색을 문자열 bgColors 배열의 색상으로 바꿉니다. 또한 위/아래 화살표 키를 눌렀을 때 레이블 글꼴 크기를 변경하는 기능이 추가되었습니다. 이제 문제가 생겼어. 그것은 동시에 적용 할 수있는 두 가지 효과를 가질 수없는 것 같습니다. 그래서 레이블의 배경색이 바뀌고 글꼴 크기 변경 메커니즘을 트리거하면 bg 색상 효과가 재설정되는 동안 글꼴 크기 효과가 레이블에 적용됩니다. 동시에 두 효과를 모두 적용 할 수 있습니까?하나의 스타일에 두 개 이상의 스타일을 동시에 프로그래밍 방식으로 적용 할 수 있습니다.

P.S : setStyle 메서드를 사용하여 내 컨트롤러의 두 가지 스타일 모두에 스타일을 적용했습니다. 어떤 일이 일어나는지

CSS (before applying styles in my controller) 

#labelRESULT { 
-fx-background-color: rgba(59, 74, 107, 0.8); 
-fx-font-size: 45px; 
-fx-text-fill: #fff; 
} 

Controller.java

@FXML 
private Label labelRESULT; 

@FXML 
private void handleKeys(KeyEvent event) { 
    int size = 45; 
    String keyPressed = event.getCode().toString().toUpperCase(); 
    switch (keyPressed) { 
     case "RIGHT": 
      labelRESULT.setStyle("-fx-bg-color: #" + bgColors[1]); 
      break; 
     case "UP": 
      labelRESULT.setStyle("-fx-font-size: " + (size + 2) + "px;"); 
      break; 
    } 
} 

이미지 : 스타일 적용하기 전에 http://imgh.us/javafx-calc.png

1 프로그래밍 방식

2 라벨의 BG 색상을 변경 한 후

3 배경색이 당신의 노드/

+0

당신은 이전의 모든 스타일을 오버라이드합니다. 더 나은 해결책은 별도의 CSS 파일을 만들고 클래스간에 전환하는 것입니다. –

+0

@fabian 감사, 휴식을 추가했습니다. –

답변

0

당신이 추가 스타일 (즉, fontSize는)와 및 getStyle() (즉, bgColor가)의 결과를 CONCAT 경우 아마 도움이 다음() 다시의 setStyle을 사용합니까?

편집이 다른 옵션 (올바른 장소에서 true 또는 false로 플래그를 설정) 것 :

labelRESULT.pseudoClassStateChanged(PseudoClass.getPseudoClass("left-right-pressed"), flag); 


labelRESULT.pseudoClassStateChanged(PseudoClass.getPseudoClass("up-down-pressed"), flag); 

를하고 CSS에서 사용자 지정 의사 클래스를 정의 :

:left-right-pressed { 
    -fx-background-color: yellow; 
} 

:up-down-pressed { 
    -fx-font-size: 14; 
} 
+1

위대한 !! 연결은 잘 작동했습니다! 왜 내가 그걸 생각하지 않았는지 모르겠다. 다시 감사합니다 = D –

+0

한 가지 질문 만합니다. 이제 또 다른 문제가 있습니다. 배경색이나 텍스트 크기를 변경할 때마다 (getStyle) 문자열이 커집니다. 같은 유형의 효과를 대체 할 수 있습니까? 마찬가지로 내가 배경 효과를 다른 스타일 시트에 매번 새로운 효과를 추가하지 않는 것으로 바꾸고 싶다. http://imgh.us/2016-12-14_15h31_07.png –

+0

@RafatRefai는 상태를 어딘가에 저장하고 상태에 따라 '스타일'을 대체합니다.상태 번호에 따라 하나 또는 두 부분 만 포함시켜야합니다 ... – fabian

0

당신은 단지 추가 할 수있는 스위치 CSS-클래스를 변경하는 동안 레이블의 글꼴 크기를 변경 한 후.

JavaFXUtils.addClasses(node, "my-class-for-font"); 
JavaFXUtils.removeClasses(node, "my-class-for-color"); 
+0

어떻게 할 수 있습니까? 제발 코드를 제공 할 수 있습니까? 내 컨트롤러의 일부를 포함하도록 내 질문을 업데이트했습니다. 잠시 살펴볼 수 있습니까? –

+0

대답 코드를 –

+0

에 보내 주셔서 감사합니다. 다른 대답은 내 질문을 해결했다. 그러나 나는 또한 당신의 방법을 시도하고 그것이 작동하는지 확인합니다 –

관련 문제