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.
Wir haben versucht, Verstecken und dann zeigt jedes Fenster. Es stellte sich heraus, dass es einfach an einem @FXML-Tag fehlte. – Kailee