2017-05-23 3 views
0

Ich bin neu in JavaFX und arbeite gerade an einer JavaFXML-Anwendung. Was ich versuche, ist eine Möglichkeit, das globale Stylesheet zu ändern, wenn ich auf eine Schaltfläche klicke. Meine aktuellen Code ist dies ..JavaFX Das globale Stylesheet vom Document Controller ändern

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 Dokument

<?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 > 

Erste 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); 
    } 

Zweite 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); 
    } 

Der Code scheint in Ordnung und zu arbeiten, wenn ich auf den Button klicken Ich erhalte keine Fehler, aber nichts passiert. Das zweite CSS scheint überhaupt nicht aufgerufen zu werden. Ich würde wirklich jede Hilfe schätzen, die ich bekommen kann. Vielen Dank im Voraus.

Antwort

0

Haben Sie versucht, sich zu verstecken und dann die Bühne (oder Ihr Hauptfenster) zu zeigen? Vielleicht aktualisieren Sie das Display würde etwas ändern ...

+0

Wir haben versucht, Verstecken und dann zeigt jedes Fenster. Es stellte sich heraus, dass es einfach an einem @FXML-Tag fehlte. – Kailee

Verwandte Themen