2017-07-17 167 views
0

我有一個可擴展的按鈕數量(大約20+)的TabPane。 我想要在左邊的區域連接以前的文本和每個按鈕所保存的新文本。JavaFX - TextArea多個按鈕放置文本

所以在開始時,TextArea(可能不是最好用的)是空白的。 然後你按Tab Foo然後選擇其中一個相應的按鈕Bar。 textarea將填充欄 - $ 10000000000000

我正在使用StringBuilder。我是否需要讓每個按鈕都向StringBuilder添加文本,然後將TextArea設置爲顯示該文本?我覺得每個按鈕都會產生真正冗餘的代碼。不過,我認爲這是因爲文本區將只能夠在按下特定按鍵來獲取文本的唯一途徑....

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.TextArea; 

/** 
* FXML Controller class 
* 
* @author David 
*/ 
public class MainMenuController implements Initializable { 

    private StringBuilder fieldContent; 

    @FXML TextArea txtReceipt; 

    @FXML 
    void btnExample(ActionEvent event) { 
     fieldContent.append(btnExample.getText()); 
     txtReceipt.setText(fieldContent.toString()); 
    } 

    void btnExample2(ActionEvent event) { 
     fieldContent.append(btnExample.getText());; 
     txtReceipt.setText(fieldContent.toString()); 
    } 

    /** 
    * Initializes the controller class. 
    */ 
    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     fieldContent = new StringBuilder(""); 
    }  

} 
+0

你能告訴我們一個你的代碼的例子嗎? – Eric

+0

添加代碼。 Thx建議 – FamousFrik

+1

BTW:'TextArea'有一個'appendText'方法......(如果你不需要'StringBuilder'來完成串聯字符串以外的任何操作)。 – fabian

回答

3

重複相同的代碼20+塊肯定是違反了乾的原則!不必爲每個按鈕使用唯一的處理函數,而是返回到FXML,並將它們全部指向單個處理程序。您可以編寫一個通用的處理程序是這樣的:

@FXML 
public void buttonPressHandler(ActionEvent event) { 
    Button b = (Button) event.getSource(); 
    fieldContent.append(b.getText()); 
    txtReceipt.setText(fieldContent.toString()); 
} 

編輯:

正如費邊在原來問題的意見中提到,文本區已建成以AppendText通過方法,這樣你可以刪除的StringBuilder和改變處理程序像這樣:

@FXML 
public void buttonPressHandler(ActionEvent event) { 
    Button b = (Button) event.getSource(); 
    txtReceipt.appendText(b.getText()); 
}