Próbowałem uzyskać przejście skalowe przy użyciu Java FX dla programu ImageView. Kod, który napisałem, wydaje się dobrze. Ale kiedy uruchomię ten kod, nie otrzymuję żadnego efektu przejścia i żadne błędy też, obraz pozostaje w odpowiedniej pozycji. Czy ktoś może mi pomóc ???

W poniższym kodzie chcę wykonywać przejście na skalę dla obrazu Resumbtn.

import java.io.IOException;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.input.KeyEvent;
import javafx.stage.Stage;

public class TryFXML extends Application{

    @Override
    public void start(Stage stage) throws IOException  {
        // TODO Auto-generated method stub
        try {
            Parent root = FXMLLoader.load(getClass().getResource("PauseScreen.fxml"));
            Scene scene=new Scene(root);
            stage.setScene(scene);
            stage.setTitle("Pause Screen");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    
    stage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}

Moja klasa kontrolera:

import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TitledPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

import java.io.IOException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.annotation.Resource;

import javafx.animation.AnimationTimer;
import javafx.animation.ScaleTransition;
import javafx.event.ActionEvent;
public class TimeController {
    
    
    
     @FXML
        private ImageView resumeBtn;
     @FXML
        private ImageView restartBtn;
     @FXML
        private ImageView saveBtn;
    
     
     
     
    @FXML
    public void initialize(Stage stage) throws IOException {
        
        
 
        ScaleTransition rsm=new ScaleTransition(Duration.seconds(5),resumeBtn);
        rsm.setAutoReverse(true);
        rsm.setCycleCount(1000);
        rsm.setFromX(1);
        rsm.setToX(4);
        rsm.setFromY(1);
        rsm.setToY(4);
        rsm.play();
        
        
    }
    
    

    
    @FXML
    void restartClicked(MouseEvent event) {
        System.out.println("you clicked here 1");
    }
    
    @FXML
    void saveClicked(MouseEvent event) {
        System.out.println("You clicked here 2");
    }
}

Mój kod FXML ::

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.effect.ColorAdjust?>
<?import javafx.scene.effect.InnerShadow?>
<?import javafx.scene.effect.Light.Distant?>
<?import javafx.scene.effect.Lighting?>
<?import javafx.scene.effect.Shadow?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.Pane?>

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="850.0" prefWidth="580.0" style="-fx-background-color: rgb(41,41,41);" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="TimeController">
   <children>
      <ImageView fx:id="resumeBtn" accessibleRole="BUTTON" accessibleRoleDescription="Button " fitHeight="200.0" fitWidth="200.0" layoutX="190.0" layoutY="104.0" style="-fx-scale-x: 1;">
         <image>
            <Image url="@Image/PlayButton.png" />
         </image>
         <effect>
            <InnerShadow choke="0.32" color="#5e5959" height="22.56" radius="11.1675" width="24.11" />
         </effect>
      </ImageView>
      <ImageView fx:id="restartBtn" fitHeight="200.0" fitWidth="200.0" layoutX="190.0" layoutY="354.0" onMouseClicked="#restartClicked">
         <image>
            <Image url="@Image/RestartButton.png" />
         </image>
         <effect>
            <Lighting diffuseConstant="1.63" specularConstant="0.15" specularExponent="40.0">
               <bumpInput>
                  <Shadow />
               </bumpInput>
               <light>
                  <Light.Distant />
               </light>
            </Lighting>
         </effect>
      </ImageView>
      <ImageView fx:id="saveBtn" fitHeight="168.0" fitWidth="166.0" layoutX="212.0" layoutY="611.0" onMouseClicked="#saveClicked">
         <image>
            <Image url="@Image/SaveButton.png" />
         </image>
         <effect>
            <ColorAdjust brightness="0.45" contrast="0.09" hue="1.0" saturation="0.02" />
         </effect>
      </ImageView>
   </children>
</Pane>
0
arjun19152 20 listopad 2020, 22:06

1 odpowiedź

Najlepsza odpowiedź

Z Dokumentacja javafx.fxml.initializable:

FXMLLoader zostanie teraz automatycznie wywołuje odpowiednio adnotowaną metodę NO-ARG {X1}}} zdefiniowaną przez kontrolera.

Zwróć uwagę na część no-arg . Musisz zdefiniować metodę initialize(), która akceptuje zero argumentów. Twoja bieżąca metoda inicjalizacji nie spełnia podanego wymogu, więc nigdy się nie nazywa.

Zmień to:

public void initialize(Stage stage) throws IOException {

Do tego:

public void initialize() throws IOException {
0
VGR 20 listopad 2020, 22:03