2017-05-23 6 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); 
    } 

コードは大丈夫動作するようだと、私はボタンをクリックしたとき、私はすべてのエラーを得ることはありませんが、何も起こりません。 2番目のCSSはまったく呼び出されていないようです。私が得ることができるすべての助けに本当に感謝します。前もって感謝します。

答えて

0

ステージ(またはルートペイン)を非表示にしてみましたか? ディスプレイが何かを変えるかもしれないことを実現しているかもしれません...

+0

私たちは隠れて、各ペインを表示しました。 1つの@FXMLタグが単純に欠けていることが判明しました。 – Kailee

関連する問題