2015-02-08 102 views
0

我試圖加載(WebEngine)在TextArea中的鏈接,當你點擊它們。但我不知道如何獲得點擊項目。JavaFX TextField獲取點擊項目

這是我嘗試:

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())); 

編輯 - 簡單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 2015-02-08 15:09:55

+0

那麼在你的問題中,我們沒有看到任何的東西。如果您需要事件中的特定文本,則不應將所有文本放入一個「TextArea」中。你可以使用'TextFlow','ListView'或者其他的東西來允許櫻桃選擇單個元素。 – eckig 2015-02-08 15:12:56

+0

這就是我要做的文字添加到TextArea:HistoryClient.getHistory()。stream()。filter(Objects :: nonNull).forEach(s - > { \t \t \t area.appendText(s +「\ n「); \t \t});我將如何將它添加到TextFlow,如果你點擊它會加載它(getHistory()是一個ArrayList,包含你使用WebEngine去到的歷史記錄) – Emrage 2015-02-08 15:15:05

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對我的幫助!