Подсветка кнопок Java FX - PullRequest
       19

Подсветка кнопок Java FX

0 голосов
/ 25 ноября 2018

enter image description here

Что я хочу сделать, пожалуйста, смотрите прикрепленный снимок экрана.После того, как я нажму между кнопками 1-4, она должна быть выделена красным цветом и оставаться такой же выделенной, пока я не выберу любую другую кнопку между кнопкой 1 и кнопкой 4, а затем выделю выделенную кнопку.Я могу сделать это с целенаправленной собственностью.Но у меня есть другие кнопки на моей сцене, такие как кнопки 5, 6 и 7. Как только я нажимаю на любую другую кнопку или нажимаю на другой элемент управления, красный цвет исчезает.Но я хочу, чтобы нажатая кнопка оставалась выделенной, или знак, показывающий, какая кнопка (между кнопкой 1 и кнопкой 4) выбрана.

1 Ответ

0 голосов
/ 25 ноября 2018

Я рекомендую использовать для этого ToggleGroup и ToggleButton.ToggleGroup позволяет вашему пользователю выбирать только одну кнопку за раз.Когда кнопка выбрана, вы можете установить желаемый стиль.

В приведенном ниже примере программы у меня есть 6 кнопок ToggleButton в группе, и только один из них может быть выбран в любой момент времени.Выбранная кнопка будет иметь красный фон (выделение цветом).Любые создаваемые вами кнопки, не имеющие этого стиля, не будут затронуты.

Также прокомментирован код ниже:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Toggle;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ButtonHighlights extends Application {

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

    @Override
    public void start(Stage primaryStage) {

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

        // Create a ToggleGroup to hold the list of ToggleButtons. This will allow us to allow the selection of only one
        // ToggleButton at a time
        ToggleGroup toggleGroup = new ToggleGroup();

        // Create our 6 ToggleButtons. For this sample, I will use a for loop to add them to the ToggleGroup. This is
        // not necessary for the main functionality to work, but is used here to save time and space
        for (int i = 0; i < 6; i++) {
            ToggleButton button = new ToggleButton("Button #" + i);

            // If you want different styling for the button when it's selected other than the default, you can either
            // use an external CSS stylesheet, or apply the style in a listener like this:
            button.selectedProperty().addListener((observable, oldValue, newValue) -> {

                // If selected, color the background red
                if (newValue) {
                    button.setStyle(
                            "-fx-background-color: red;" + 
                            "-fx-text-fill: white");
                } else {
                    button.setStyle(null);
                }
            });

            // Add the button to our ToggleGroup
            toggleGroup.getToggles().add(button);
        }

        // Add all our buttons to the scene
        for (Toggle button :
                toggleGroup.getToggles()) {
            root.getChildren().add((ToggleButton) button);
        }

        // Show the Stage
        primaryStage.setWidth(300);
        primaryStage.setHeight(300);
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }
}

Результат:

screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...