0
我試圖加載(WebEngine)在TextArea中的鏈接,當你點擊它們。但我不知道如何獲得點擊項目。JavaFX TextField獲取點擊項目
這是我嘗試:
area.setOnMouseClicked(event -> {
WebController.getEngine().load((String) event.getSource());
});
我試圖加載(WebEngine)在TextArea中的鏈接,當你點擊它們。但我不知道如何獲得點擊項目。JavaFX TextField獲取點擊項目
這是我嘗試:
area.setOnMouseClicked(event -> {
WebController.getEngine().load((String) event.getSource());
});
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();
}
如果有人想看看它開啓這裏是我的代碼即時通訊使用:
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對我的幫助!
問題是我的TextArea包含很多文本行,所以不會工作 – Emrage 2015-02-08 15:09:55
那麼在你的問題中,我們沒有看到任何的東西。如果您需要事件中的特定文本,則不應將所有文本放入一個「TextArea」中。你可以使用'TextFlow','ListView'或者其他的東西來允許櫻桃選擇單個元素。 – eckig 2015-02-08 15:12:56
這就是我要做的文字添加到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