2017-02-22 19 views
-1

我是javaFX的初學者,並且卡在這一個區域。任何幫助將不勝感激。 這是我使用場景生成器清晰理解的示例應用程序。有一個文本區域和一個按鈕。我想在點擊按鈕的文本區域中設置數據。該設置發生在另一個線程中。 代碼如下:setText()不會反映從另一個線程調用時發生的更改

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

代碼有很多問題。

  1. 對JavaFX應用程序線程的活動場景圖的修改必須通過Platform.runLater()執行。
  2. 你不需要另一個線程來完成一個按鈕點擊的東西。
  3. 加載,你在你的代碼,而不是連接到一個場景所產生的節點做一個FXML是無意義的,因爲用戶將不會看到未連接到場景東西。

您的代碼可能存在其他問題,導致其無法按預期工作。

通常,如需幫助調試問題,請提供mcve。請注意,它應該是最小完成以便有人可以複製和粘貼代碼來複制問題(而幾乎沒有別的)。

相關問題