Этап JAVAFX: выбор кнопки по умолчанию и выравнивание с помощью текстового отступа - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в Javafx и пытаюсь реализовать диалоговое окно предупреждения / подтверждения для пользователя.

Я могу получить диалоговое окно, но не могу выровнять его согласно требованиям.

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

Теперь мне нужно внести два изменения:

  1. Я хочу, чтобы кнопки располагались рядом, сначала да, а потом нет. Но по умолчанию следует выбрать Нет. Чтобы при закрытии «Нет» отправлялось в качестве ответа.
  2. Я хочу, чтобы между текстом и кнопками был пробел. Также возможно ли получить текст в две строки, если размер текста увеличивается?

Ниже мой текущий код:

public static boolean display(String title, String message){
        Stage window = new Stage();
        window.initModality(Modality.APPLICATION_MODAL);
        window.setTitle("Confirmation");
        window.setMinWidth(540);
        window.setMinHeight(250);
        Label label = new Label();
        label.setText(message);

        Button yesButton = new Button("Yes");
        Button noButton = new Button("no");

        yesButton.setOnAction(e->{
            answer = true;
            window.close();
        });

        noButton.setOnAction(e->{
            answer = false;
            window.close();
        });
        
        VBox layout = new VBox(10);
        layout.getChildren().addAll(label,noButton,yesButton);
        layout.setAlignment(Pos.CENTER);
        Scene scene = new Scene(layout);
        window.setScene(scene);
        window.showAndWait();
        return answer;
    }

Пожалуйста, помогите. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Класс Button не поддерживает метод .setSelected, поэтому мы должны использовать класс ToggleButton:

    ToggleButton yesToggleButton = new ToggleButton("Yes");

    ToggleButton noToggleButton = new ToggleButton("No");

    noToggleButton.setSelected(true);

Как вы также можете видеть, слово Toggle встречается в класс ToggleButton, что означает, что кнопку можно либо выбрать, либо нет.

Теперь мы должны назначить objects класса ToggleButton объекту ToggleGroup, потому что objects класса ToggleButton может управляться классом ToggleGroup:

ToggleGroup toggleGroup = new ToggleGroup();

yesToggleButton.setToggleGroup(toggleGroup);

noToggleButton.setToggleGroup(toggleGroup);

Чтобы создать расстояние от кнопок, теперь мы должны указать координаты для abscissa axis и ordinate axis:

    yesToggleButton.setTranslateX(-100); // abscissa axis
    yesToggleButton.setTranslateY(25);  // ordinate axis

    noToggleButton.setTranslateX(100); // abscissa axis
    noToggleButton.setTranslateY(25); // ordinate axis

Если размер шрифта увеличивается и шрифт больше не читается, его можно отобразить в другой строке с помощью метода .setWrapText:

messageType.setFont(Font.font(20)); // sets the font size

messageType.setWrapText(true);

Вы использовали класс VBox, который выравнивает objects по вертикали. Поскольку вы хотите, чтобы objects был горизонтальным, вы можете использовать HBox или выровнять objects в любом направлении, я бы рекомендовал StackPane:

StackPane root = new StackPane();

Я бы порекомендовал вам этот метод для установки сцены:

Stage confirmationWindow = new Stage();

confirmationWindow.setScene(new Scene(root, 540, 323));
1 голос
/ 04 августа 2020

Я хочу, чтобы кнопки располагались рядом, сначала да, а потом нет

Поместите кнопки в HBox

Не следует выбирать по умолчанию. Так что при закрытии No отправляется в качестве ответа.

См. здесь для аналогичного вопроса

Я хочу, чтобы между текстом и кнопки.

Добавьте немного поля в верхнюю часть HBox, в который вы поместите свои кнопки

HBox h = //...
HBox.setMargin(h, new Insets(20, 0, 0, 0));

Также возможно получить текст в две строки, если размер текста увеличивается?

label.setWrapText(true);
...