event.getSource()
будет в вашем случае TextArea
.
Так что ваш код будет либо
area.setOnMouseClicked(event -> WebController.getEngine().load(((TextArea) event.getSource()).getText()));
или проще:
area.setOnMouseClicked(event -> WebController.getEngine().load(area.getText()));
Edit - Простой TextFlow
пример:
@Override
public void start(Stage primaryStage) {
TextFlow textFlow = new TextFlow();
textFlow.setOnMouseClicked(ev -> {
if(ev.getTarget() instanceof Text) {
Text clicked = (Text) ev.getTarget();
System.out.println(clicked);
}
});
IntStream.range(0, 500).mapToObj(Integer::toString).map(Text::new).forEach(textFlow.getChildren()::add);
BorderPane borderpane = new BorderPane(textFlow);
borderpane.setPadding(new Insets(20));
Scene scene = new Scene(borderpane, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
Проблема в моем TextArea содержит много строк текста, так что это не сработало – Emrage
Ну, в вашем вопросе мы ничего не видим. Если вам нужен конкретный текст из события, вы не должны помещать весь текст в один текст TextArea. Вы можете использовать 'TextFlow',' ListView' или что-то еще, что позволяет вишневым выбрать отдельные элементы. – eckig
Это то, что я делаю, чтобы добавить текст в TextArea: HistoryClient.getHistory(). Stream(). Filter (Objects :: nonNull) .forEach (s -> { \t \t \t area.appendText (s + "\ n "); \t \t}); Как бы я мог добавить это в TextFlow, и если вы нажмете на него, он будет загружать его (getHistory() - это ArrayList, содержащий историю, с которой вы столкнулись с WebEngine) – Emrage