2017-05-23 1 views
0

저는 JavaFX를 처음 사용하고 있으며 현재 JavaFXML 응용 프로그램을 작성 중입니다. 내가하려는 것은 버튼을 클릭 할 때 글로벌 스타일 시트를 변경하는 방법을 찾는 것입니다. 나의 현재 코드는이 ..JavaFX 문서 컨트롤러에서 글로벌 스타일 시트 변경

Main.Java

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

    public class CssChange extends Application { 

    static FXMLDocumentController myControllerHandle; 

    @Override 
    public void start(Stage stage) throws Exception { 
    FXMLLoader loader = new 
    FXMLLoader(getClass().getResource("CssChange.fxml")); 
    Parent root = loader.load(); 

    myControllerHandle = (FXMLDocumentController)loader.getController(); 

    Scene scene = new Scene(root); 

    stage.setScene(scene); 
    stage.show(); 
} 

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

Controller.java

import java.io.IOException; 
    import java.net.URL; 
    import java.util.ResourceBundle; 
    import javafx.event.ActionEvent; 
    import javafx.fxml.FXML; 
    import javafx.fxml.FXMLLoader; 
    import javafx.fxml.Initializable; 
    import javafx.scene.Parent; 
    import javafx.scene.Scene; 
    import javafx.scene.control.Button; 
    import javafx.scene.control.Label; 
    import javafx.scene.layout.AnchorPane; 
    import javafx.scene.layout.Pane; 

    public class FXMLDocumentController implements Initializable { 

    @FXML 
    private Label label; 

@FXML 
private Button button; 

@FXML 
private void CssChange(ActionEvent event) throws IOException{ 
    Parent root; 
    root = (AnchorPane) FXMLLoader.load(getClass().getResource("CssChange.fxml")); 
    System.out.println("You clicked me!"); 
    label.setText("Hello World!"); 
    String css = CssChange.class.getResource("login2.css").toExternalForm(); 
    root.getStylesheets().clear(); 
    root.getStylesheets().add(css); 
    root.applyCss(); 
} 

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    // TODO 
}  

} 

FXML 문서

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

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

    <AnchorPane prefHeight="800.0" prefWidth="480.0" 
     stylesheets="@Login.css" xmlns="http://javafx.com/javafx/8.0.111" 
     xmlns:fx="http://javafx.com/fxml/1" 
     fx:controller="csschange.FXMLDocumentController" fx:id="root"> 

<children> 
    <Button layoutX="14.0" layoutY="25.0" mnemonicParsing="false" 
     onAction="#CssChange" text="CSS Change" fx:id="button"> 
    <font> 
     <Font name="Arial Bold Italic" size="18.0" /> 
    </font> 
    </Button> 
    <Label layoutX="126" layoutY="120" minHeight="16" minWidth="69" 
     fx:id="label" /> 
    </children> 
    </AnchorPane > 

먼저 CSS

.root { 
    -fx-background-color: 
    linear-gradient(#000000 0%, #ffffff 100%); 
    } 

    .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); 
    } 
,

두 번째 CSS

.root { 
    -fx-background-image: url("background.jpg"); 
    } 

    .label { 
    -fx-font-size: 12px; 
    -fx-font-weight: bold; 
    -fx-text-fill: #ffffff; 
    -fx-effect: dropshadow(gaussian , rgba(255,255,255,0.5) , 0,0,0,1); 
    } 

코드는 괜찮 작동하는 것 같다 내가 버튼을 클릭 할 때 나는 오류를 얻을하지 않습니다하지만 아무 일도 발생하지 않습니다. 두 번째 CSS는 전혀 호출되지 않는 것 같습니다. 내가 얻을 수있는 도움에 정말 감사드립니다. 미리 감사드립니다.

답변

0

무대를 숨기려고 했습니까 (또는 루트 창)? 어쩌면 디스플레이가 뭔가를 바꿀 것입니다 실현 ...

+0

우리는 각 창을 숨기고 표시하려고했습니다. 그것은 하나의 @FXML 태그의 간단한 부족으로 밝혀졌습니다. – Kailee

관련 문제