2014-07-07 2 views
1

뭔가 문제가 있습니다. 나는 또한 내가 그들에게 다음과 같은 CSS를 적용 할 수 있도록 메뉴 아이템의 스타일을 원하는 이러한 맥락 내부MenuItem 포커스 된 스타일의 CSS 스타일링 JavaFX

#validation-error-context 
{ 
    -fx-background-color: #ffbbbb; 
    -fx-border-color: #f00; 
} 

: 그래서 사용자 정의 컨텍스트 메뉴 유효성 검사 오류 컨텍스트와 해당 CSS를 이것에 대한이

#error-menu-item 
{ 
    -fx-background-color: #ffbbbb; 
} 

.error-menu-item:focused 
{ 
    -fx-background-color: #ffbbbb; 
    -fx-text-fill: red; 
} 

모두가 계획대로 작동하며 항목과 컨텍스트는 빨간색 배경과 테두리가 있습니다. 나는 전통적를 통해 수행 할 것 MenuItem에의 집중 상태에 텍스트 채우기 색상을 설정하려는 경우 이제 문제는 다음과 같습니다 분명히 프로젝트의 모든 메뉴 아이템에 해당 스타일을 적용 할

그러나
.menu-item:focused .label 
{ 
    -fx-text-fill: red; 
} 

하는 내가 원한 것이 아니며 아래 문을 사용하면 내가 사용하고있는 인스턴스에서 작동하지 않습니다.

.error-menu-item:focused .label 
{ 
    -fx-text-fill: red; 
} 

CSS 또는 코드를 통해 집중 라벨의 텍스트 채우기 속성을 설정할 수있는 방법이 있습니까? 임에도 불구하고 올바른 방향으로가는 포인터는 매우 높이 평가 될 것입니다.

답변

2

대신 ID의 CSS 클래스로 오류를 설정 한 코드는 한, 작동합니다 : (#) 코드와 최소한의 컴파일 가능한 예제를

봐 :

MenuController.java

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.MenuButton; 
import javafx.scene.control.MenuItem; 
public class MenuController implements Initializable { 
    @FXML private MenuButton OkMenu; 
    @FXML private MenuItem foo1; 
    @FXML private MenuItem bar2; 
    @Override 
    public void initialize(URL arg0, ResourceBundle arg1) { 
     //Define foo1 and bar 2 as errors: 
     foo1.getStyleClass().add("error-menu-item"); 
     bar2.getStyleClass().add("error-menu-item"); 
    } 
} 

Main.java < - 단지 CSS와 FXML로드

,451,515,
import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

public class Main extends Application { 
    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("menu.fxml")); 
     Scene scene = new Scene(root); 
     scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm()); 
     stage.setScene(scene); 
     stage.setTitle("Menu"); 
     stage.show(); 

    } 
    public static void main(String[] args) { 
     launch(args); 
    } 
} 

있는 style.css

.error-menu-item 
{ 
    -fx-background-color: #ffbbbb; 
} 

.error-menu-item:focused .label 
{ 
    -fx-text-fill: red; 
} 

menu.fxml

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="MenuController"> 
<children><MenuButton layoutX="0.37109375" layoutY="7.5" mnemonicParsing="false" text="FooMenu"> 
    <items> 
    <MenuItem fx:id="foo1" mnemonicParsing="false" text="Foo1" /> 
    <MenuItem fx:id="foo2" mnemonicParsing="false" text="Foo2" /><MenuItem fx:id="foo3" mnemonicParsing="false" text="Foo3" /> 
    </items> 
</MenuButton><MenuButton layoutX="99.7421875" layoutY="7.5" mnemonicParsing="false" text="BarMenu"> 
    <items> 
    <MenuItem fx:id="bar1" mnemonicParsing="false" text="Bar1" /> 
    <MenuItem fx:id="bar2" mnemonicParsing="false" text="Bar2" /><MenuItem fx:id="bar3" mnemonicParsing="false" text="Bar3" /> 
    </items> 
</MenuButton> 
</children> 

당신은 Gist에이 코드를 다운로드 할 수 있습니다.

+0

건배 남자, 완벽하게 작동합니다 - 나는 getStyleClass(). add()가 아닌 CSS를 설정하기 위해 setId를 사용하고있었습니다. 두 기능간에 서로 다른 행동의 이유는 무엇입니까? –

+0

모든 질문에 대해 유감스럽게 생각하지만 클래스에 여러 가지 스타일 상태가있는 방법이 있습니까? 예를 들어, 일반적인 CSS 상태를 가질 수있는 텍스트 필드와 포커스가 설정된 강조 표시를 설정하는 오류 CSS 상태는 무엇입니까? –

+1

첫 번째로,'setId'를 쓰면 Id가 특정 것으로 가정되면서 그 스타일을 가진 클래스 하나만 가질 수 있습니다 (또한 fx : id는 위의 코드에서 CSS에'# foo2'를 추가하려고합니다. 게다가, 클래스는 더 일반적이어서 서브 클래스를 가질 수있다. 예를 들어'.error-menu-item : focused'와 같이 id는 가질 수 없다. 두번째 코멘트 : 클래스가 변경되는 경우 (더 많은 질문이 있으면 다른 [질문] (http://stackoverflow.com/questions/ask)를 작성하십시오.) 주석에서이 내용을 확장하지 마십시오. – Mansueli