2015-09-03 16 views
0

我正在使用JavaFX和SceneBuilder爲教育性文本處理應用程序創建前端。對於這部分應用程序,用戶輸入兩個單詞,然後計算它們之間的編輯距離。返回字路徑的字符串列表。具體細節在這一點上並不重要,但我正在研究如何顯示結果。無論長度如何,我都希望它們能夠居中。我還必須處理字符串的寬度對於對話窗口來說太大的情況,所以在那裏輸入也會很好。現在我只是使用一個單一的AnchorPane和Labels,我敢肯定它太簡單了,我希望有更好的方法來實現這一點。保持以JavaFX爲中心的可變長度字符串(使用標籤)

編輯:也有一個問題,當對話框第一次彈出標籤不存在,然後一旦點擊它們出現。

public void setResult(List<String> result) { 

    numStepsLabel.setText(Integer.toString(result.size()-2)); 

    //TODO -- work on layout 
    String str = buildResultString(result); 
    pathLabel.setText(str); 

} 

private String buildResultString(List<String> result) { 
    StringBuilder sb = new StringBuilder(); 

    for(String str : result) { 
     sb.append(str); 
     sb.append(" -> "); 
    } 

    // delete last -> 
    sb.delete(sb.length() - 4, sb.length() -1); 
    return sb.toString(); 
} 


<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.layout.AnchorPane?> 

<AnchorPane prefHeight="200.0" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="application.EDResultController"> 
    <!-- TODO Add Nodes --> 
    <children> 
    <Label layoutX="120.0" layoutY="45.0" text="Word Path:" /> 
    <Label fx:id="pathLabel" layoutX="136.0" layoutY="74.0" text="Label" textAlignment="CENTER" /> 
    <Label layoutX="59.0" layoutY="123.0" text="Number of steps:" /> 
    <Label fx:id="numStepsLabel" layoutX="180.0" layoutY="123.0" text="Label" /> 
    <Button layoutX="132.0" layoutY="159.0" mnemonicParsing="false" text="OK" /> 
    </children> 
</AnchorPane> 

回答

0

不是解決辦法,但你可能要檢查在buildResultString空列表。

// delete last -> 
if (sb.length() > 0) 
    sb.delete(sb.length() - 4, sb.length() - 1); 
1

您可以在AnchorPane中設置節點的佈局x和y屬性。結果是給他們固定的職位,他們不能居中。替代方法是使用VBoxHBox es的組合。而不是設置x-y佈局屬性,因爲VBox/HBox會忽略它們並自動執行佈局。有關不同佈局的信息,請參閱Working With Layouts in JavaFX

<VBox prefHeight="200.0" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" 
     fx:controller="application.EDResultController" alignment="CENTER" fillWidth="true" spacing="10" > 
    <!-- TODO Add Nodes --> 
    <children> 
     <Label text="Word Path:" /> 
     <Label fx:id="pathLabel" text="Label" textAlignment="CENTER" /> 
     <HBox alignment="CENTER" spacing="10" > 
      <children> 
       <Label text="Number of steps:" /> 
       <Label fx:id="numStepsLabel" text="Label" /> 
      </children> 
     </HBox> 
     <Button mnemonicParsing="false" text="OK" /> 
    </children> 
</VBox> 

另外,buildResultString()可以被簡化爲

private String buildResultString(List<String> result) 
{ 
    return String.join(" -> ", result); 
}