Проверьте, соответствует ли рисунок кнопки изображению - PullRequest
0 голосов
/ 20 февраля 2019

Итак, я делаю небольшое приложение с кнопкой и изображением там.

btnPlay.setGraphic(new ImageView(imagePlay));

Теперь у меня есть ActionEvent для переключения изображения, если кнопка нажата (КакКнопка паузы в Spotify).Проблема в том, что я понятия не имею и ничего не нашел в интернете, как я могу справиться с этим с помощью оператора if - else.И то, что я попробовал, не работает.

        btnPlay.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {

            Image imagePause = new Image(path);


            if (btnPlay.getGraphic().equals(imagePause)) {
                btnPlay.setGraphic(new ImageView(imagePlay));
            }

        }
    });

Спасибо за каждый ответ.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Как указано в комментариях, приведенный ниже код демонстрирует использование BooleanProperty в вашем приложении, которое содержит текущее состояние "воспроизводит мультимедиа":

BooleanProperty isPlaying = new SimpleBooleanProperty();

Добавляя прослушиватель к этому свойству, выможет гарантировать, что правильный значок всегда отображается на кнопке воспроизведения:

isPlaying.addListener((observable, oldValue, newValue) -> {
    if (newValue) {
        playButton.setGraphic(pauseIcon);
    } else {
        playButton.setGraphic(playIcon);
    }
});

Тогда просто сделайте так, чтобы ваш Button также переключал состояние этого BooleanProperty:

playButton.setOnAction(event -> {
    // Toggle the isPlaying property
    isPlaying.set(!isPlaying.get());
});

Вот полный пример приложения, которое вы можете запустить, чтобы проверить его самостоятельно:

import javafx.application.Application;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ContentDisplay;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class PlayButtonToggleSample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        // Simple Interface
        VBox root = new VBox(10);
        root.setAlignment(Pos.CENTER);
        root.setPadding(new Insets(10));

        // Create our two ImageViews to hold the icons we need
        ImageView playIcon = new ImageView("play.png");
        ImageView pauseIcon = new ImageView("pause.png");

        // BooleanProperty to track whether or not the application is currently playing media
        BooleanProperty isPlaying = new SimpleBooleanProperty();

        // Create a simple button with an image
        Button playButton = new Button();
        playButton.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
        playButton.setGraphic(playIcon);

        // Add action for the button
        playButton.setOnAction(event -> {
            // Toggle the isPlaying property
            isPlaying.set(!isPlaying.get());
        });

        // Now, add a listener to the isPlaying property that will toggle the icon used on the playButton
        isPlaying.addListener((observable, oldValue, newValue) -> {
            if (newValue) {
                playButton.setGraphic(pauseIcon);
            } else {
                playButton.setGraphic(playIcon);
            }
        });

        root.getChildren().add(playButton);

        // Show the stage
        primaryStage.setScene(new Scene(root));
        primaryStage.setTitle("Sample");
        primaryStage.show();
    }
}
0 голосов
/ 20 февраля 2019

Итак, я не нашел способ, как я могу проверить, равно ли изображение, но я нашел способ, как решить эту проблему.Это мое решение:

    ImageView imgPlay = new ImageView(new Image(path + "play.png"));
    grid.add(imgPlay, 1, 0);

    ImageView imgPause = new ImageView(new Image(path + "pause.png"));

    imgPause.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent event) {
            grid.getChildren().remove(imgPause);
            grid.add(imgPlay, 1, 0);
        }
    });

    imgPlay.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent event) {
            grid.getChildren().remove(imgPlay);
            grid.add(imgPause, 1, 0);
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...