2015-02-08 2 views
0

Я пытаюсь загрузить (WebEngine) ссылки, которые находятся в TextArea, когда вы нажимаете на них. Но я понятия не имею, как получить щелчок.JavaFX TextField Get Clicked Item

Это то, что я пробовал:

area.setOnMouseClicked(event -> { 
      WebController.getEngine().load((String) event.getSource()); 
     }); 

ответ

1

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(); 
} 
+0

Проблема в моем TextArea содержит много строк текста, так что это не сработало – Emrage

+0

Ну, в вашем вопросе мы ничего не видим. Если вам нужен конкретный текст из события, вы не должны помещать весь текст в один текст TextArea. Вы можете использовать 'TextFlow',' ListView' или что-то еще, что позволяет вишневым выбрать отдельные элементы. – eckig

+0

Это то, что я делаю, чтобы добавить текст в TextArea: HistoryClient.getHistory(). Stream(). Filter (Objects :: nonNull) .forEach (s -> { \t \t \t area.appendText (s + "\ n "); \t \t}); Как бы я мог добавить это в TextFlow, и если вы нажмете на него, он будет загружать его (getHistory() - это ArrayList, содержащий историю, с которой вы столкнулись с WebEngine) – Emrage

0

Если кто хотят увидеть, что получилось вот мой код им с помощью:

package com.ekko.history; 

import java.net.URL; 
import java.util.Objects; 
import java.util.ResourceBundle; 

import com.ekko.WebController; 

import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.text.Text; 
import javafx.scene.text.TextFlow; 

public class HistoryController implements Initializable { 

    @FXML 
    private TextFlow textFlow; 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     textFlow.getChildren().clear(); 
     textFlow.setOnMouseClicked(ev -> { 
      if(ev.getTarget() instanceof Text) { 
       Text clicked = (Text) ev.getTarget(); 
       WebController.getEngine().load(clicked.getText()); 
      } 
     }); 
     HistoryClient.getHistory().stream().filter(Objects::nonNull).forEach(s -> { 
      Text text = new Text(s + "\n"); 
      textFlow.getChildren().add(text); 
     }); 
     HistoryClient.getHistory().clear(); 
    } 
} 

И это файл FXML:

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.text.*?> 
<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.layout.AnchorPane?> 

<ScrollPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.ekko.history.HistoryController"> 
    <content> 
     <TextFlow fx:id="textFlow" prefHeight="400.0" prefWidth="600.0" /> 
    </content> 
</ScrollPane> 

Благодаря eckig за помощь!