Я пытаюсь сделать индикатор с помощью переключателя.Он будет «светиться», когда его «Выбранное» значение истинно.И не «подсвечивать», когда это «выбранное» значение ложно.Я добавил обычную кнопку только для проверки форматирования визуальных элементов на кнопке переключения.В реальной программе «огни» будут контролироваться другими методами.
Проблема в том, когда я устанавливаю, toggleBtn.setSelected (true);это не обновляет визуальные эффекты.Если я вызываю toggleBtn.isSelected ();он возвращает true, поэтому я знаю, что он обновляется, но не визуально.Если я предварительно выберу кнопку переключения, щелкнув ее в программе перед нажатием кнопки «Тест», она переключится на отключенную графику.Но он не вернется к визуальным эффектам.
Я искал все, и мне кажется, что мне нужно добавить слушателя, но я не уверен, как это поможет обновить визуальные эффекты?
Ниже приведены соответствующие частикод.Если вам нужно больше, пожалуйста, дайте мне знать.
Контроллер
@FXML
private void LightsTest(ActionEvent event) throws InterruptedException {
System.out.println("Light illuminated");
toggleBtn.setSelected(true);
System.out.println("Light is Selected: " + toggleBtn.isSelected());
Thread.sleep(1000);
System.out.println("Light not illuminated");
toggleBtn.setSelected(false);
System.out.println("Light is Selected: " + toggleBtn.isSelected());
}
FXML
<AnchorPane id="mainPane" prefHeight="600.0" prefWidth="1024.0" stylesheets="@CSSFile.css" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml">
<children>
<ToggleButton id="Light" fx:id="toggleBtn" mnemonicParsing="false" styleClass="warningLights" text="LIGHT ON" />
<Button id="testBtn" fx:id="lightsBtn" layoutX="427.0" layoutY="30.0" mnemonicParsing="false" onAction="#LightsTest" prefHeight="49.0" prefWidth="106.0" text="TEST LIGHTS" />
</children>
</AnchorPane>
CSS
.warningLights {
-fx-background-color: linear-gradient(#132233 5%, #465566 50%, #132233 95%);
-fx-background-radius: 15px;
-fx-border-width: 5px;
-fx-border-radius: 15px 15px 15px 15px;
-fx-font-size: 18px;
-fx-font-weight: bold;
}
.warningLights:selected {
-fx-background-color: linear-gradient(#EE0000 5%, #FDA8A8 50%, #EE0000 95%);
-fx-effect: dropshadow(three-pass-box, black, 10, 0.0, 1, 5);
}
Спасибо всем!