Je suis nouveau sur JavaFX et je travaille actuellement sur une application JavaFXML. Ce que j'essaye de faire est de trouver un moyen de changer la feuille de style globale quand je clique sur un bouton. Mon code actuel est ce ..JavaFX Modification de la feuille de style globale à partir du contrôleur de document
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 document
<?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 >
premier 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);
}
deuxième 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);
}
Le code semble fonctionner bien et quand je clique sur le bouton je ne reçois pas d'erreur, mais, rien ne se passe. Le second CSS ne semble pas du tout appelé. J'apprécierais vraiment toute aide que je pourrais obtenir. Merci d'avance.
Nous avons essayé de cacher, puis montrant chaque volet. Il s'est avéré être un simple manque d'un tag @FXML. – Kailee