JavaFX: как сделать кликабельный текст

Я ищу простой способ сделать это. Я не могу найти его нигде, и я уже пробовал API.

поэтому у меня есть предложение:

нет учетной записи? Нажмите здесь

Я хочу сделать слово "здесь" синим и кликабельным-в кнопку. Как этого достичь? Я просто делаю невидимую кнопку позади позиции текста?

1 ответов


решение

использовать textflow в (Java 8):

TextFlow flow = new TextFlow(
    new Text("Don't have an account? "), new Hyperlink("Click here")
);

используйте FlowPane (Java 7):

FlowPane flow = new FlowPane();
flow.getChildren().addAll(
    new Text("Don't have an account? "), new Hyperlink("Click here")
);

пример

вот полный, исполняемый пример (Java 8):

clickme

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.text.*;
import javafx.stage.Modality;
import javafx.stage.*;

public class TextLink extends Application {

    @Override
    public void start(final Stage primaryStage) throws Exception {
        Stage     accountCreation = buildAccountCreationStage(primaryStage);
        Hyperlink createAccount   = buildCreateAccountLink(primaryStage, accountCreation);

        TextFlow flow = new TextFlow(
            new Text("Don't have an account? "), createAccount
        );
        flow.setPadding(new Insets(10));

        primaryStage.setScene(new Scene(new Group(flow)));
        primaryStage.show();
    }

    private Hyperlink buildCreateAccountLink(Stage primaryStage, Stage accountCreation) {
        Hyperlink createAccount = new Hyperlink("Click here");

        createAccount.setOnAction(event -> {
            accountCreation.setX(primaryStage.getX());
            accountCreation.setY(primaryStage.getY() + primaryStage.getHeight());
            accountCreation.show();
        });

        return createAccount;
    }

    private Stage buildAccountCreationStage(Stage primaryStage) {
        Stage accountCreation = new Stage(StageStyle.UTILITY);

        accountCreation.initModality(Modality.WINDOW_MODAL);
        accountCreation.initOwner(primaryStage);
        accountCreation.setTitle("Create Account");
        accountCreation.setScene(new Scene(new Label("<Account Creation Form Goes Here>"), 250, 50));

        return accountCreation;
    }

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

выделение ссылки по умолчанию является странным с пунктирной границей вокруг него (если вы хотите, вы можете стилизовать его с помощью css, чтобы получить что-то более приятное и похожее на ссылки в интернете; т. е. просто другой цветной текст для указания посещенных и не посещенных ссылок).

в сторону

для вас конкретное сообщение, вы должны просто сделать текст" нет учетной записи "гиперссылкой и избавиться от текста" нажмите здесь" (как рекомендовано органом веб-стандартов w3c).

по теме