我是javaFX的初学者,我被困在这个领域。任何帮助将不胜感激。 这是我使用场景构建器清楚理解的示例应用程序。有一个文本区域和一个按钮。我想在按钮点击上将数据设置到文本区域。设置发生在另一个线程中。 代码如下:
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javafx.stage.Stage;
public class TpController{
@FXML
private ScrollPane scrollPane;
@FXML
private Button button;
@FXML
public TextArea txtArea ;
private Stage stage;
public void setTextArea(TextArea txt)
{
this.txtArea = txt ;
}
public TextArea getTextArea()
{
return txtArea;
}
public void setStage(Stage stage)
{
this.stage = stage;
}
public Stage getStage()
{
return stage;
}
public void setTopText(String text) {
// set text from another class
txtArea.setText(text);
}
public void buttonHandler()
{
tpThread t = new tpThread();
t.start();
}
tpThread类如下:
import java.io.IOException;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.control.TextArea;
import javafx.stage.Stage;
public class tpThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
FXMLLoader loader = new FXMLLoader(getClass().getResource("Justtp.fxml"));
try {
Parent root = (Parent) loader.load();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
TpController myController = loader.getController();
TextArea t = myController.getTextArea();
String data = "hi\nhello\nhow are you\nnice to meet you\nhahaha";
//System.out.println(t.setData("hi"));
myController.setTopText(data);
}
我没有使用setTopText,而是直接使用
t.setText(data);
但没用。我的最终输出在按钮单击时没有任何作用。
答案 0 :(得分:0)
您的代码存在许多问题。
Platform.runLater()
对JavaFX应用程序线程的活动场景图进行修改。setOnAction()
为按钮定义操作处理程序。 onAction="#handleButtonAction"
where handleButtonAction
is defined as a public void handleButtonAction(ActionEvent event)
method in your controller。您的代码可能存在其他问题,导致其无法按预期工作。
通常,为了帮助调试问题,请提供mcve。请注意,它应该是 minimal 和 complete ,以便有人可以复制并粘贴代码来复制问题(而且几乎没有别的)。