2017-02-18 4 views

ответ

1

Возможно, вы захотите обратиться к этому similar thread, он содержит подробный ответ на ваш вопрос.

+0

по вашему ответу Я разработал простое приложение, но у меня есть некоторые сомнения, которые я опубликовал ниже. Ответ, связанный с этим, дает мне несколько советов о том, как это сделать. – pen1993

4

Я взял выше справки Я разработал простой пример. Ниже Мой FXML файл:

FxmlDocument.fxml: 
<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.layout.AnchorPane?> 

<AnchorPane id="AnchorPane" prefHeight="283.0" prefWidth="320" stylesheets="@application.css" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="blinkimagecolor.FXMLDocumentController"> 
    <children> 
     <Label fx:id="label" alignment="CENTER" layoutX="40.0" layoutY="36.0" prefHeight="131.0" prefWidth="232.0" style="-fx-background-image: url('/images/Printer_T.png'); -fx-background-position: center; -fx-background-repeat: no-repeat;" stylesheets="@application.css" /> 
     <Button fx:id="button" layoutX="134.0" layoutY="209.0" mnemonicParsing="false" onAction="#buttonpressAction" text="Button" /> 
    </children> 
</AnchorPane> 

Ниже Мой класс контроллера:

FXMLDocumentController.java:- 
import java.net.URL; 
import java.time.Duration; 
import java.util.ResourceBundle; 
import javafx.animation.Animation; 
import javafx.animation.KeyFrame; 
import javafx.animation.Timeline; 
import javafx.css.PseudoClass; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 


public class FXMLDocumentController implements Initializable { 

    @FXML 
    private Label label; 
    @FXML 
    private Button button; 

    Timeline flasher ; 
    PseudoClass flashHighlight; 
    int i = 0; 
    @Override 


    public void initialize(URL url, ResourceBundle rb) { 
     // TODO 
     flashHighlight = PseudoClass.getPseudoClass("flash-highlight"); 
     flasher = new Timeline(new KeyFrame(javafx.util.Duration.seconds(0.5), e -> { 
      label.pseudoClassStateChanged(flashHighlight, true); 
     }), 
       new KeyFrame(javafx.util.Duration.seconds(1.0), e -> { 
      label.pseudoClassStateChanged(flashHighlight, false); 
     }) 
    ); 
    flasher.setCycleCount(Animation.INDEFINITE); 

    }  

    @FXML 
    private void buttonpressAction(ActionEvent event) { 

     if(i == 0){ 
      flasher.play(); 
      i = 1; 
      System.out.println("start method"); 
     }else{ 
      flasher.stop(); 
      i = 0; 
      System.out.println("stop method"); 
      label.pseudoClassStateChanged(flashHighlight, false); 
     } 
     System.out.println("Out of button function"); 

    } 

} 

И Ниже один мой основной класс:

public class BlinkImageColor extends Application { 

    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml")); 

     Scene scene = new Scene(root); 

     stage.setScene(scene); 
     stage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 

и файл CSS является:

application.css:- 
:flash-highlight{ 
    -fx-background-color:red; 
} 

Th я работаю нормально, но если я хочу применить одно и то же к нескольким раза, то как я могу это сделать, не разбивая несколько строк? Timeline menas Как я могу использовать одну и ту же временную шкалу для нескольких ярлыков одновременно с независимо.

Output of above code

Это один будет работать, когда мы нажимаем на кнопку цвет фона собирается мигать красным цветом, а если нажать на ту же кнопку, что будет остановить мигающий цвет.

Как и выше, если у нас есть несколько кнопок и несколько меток, они должны работать независимо, как, например, нажатием кнопки. с общими Временная шкала. Как мы можем сделать это?

Смежные вопросы