我正在使用JavaFX和SceneBuilder为教育文本处理应用程序创建前端。对于应用程序的这一部分,用户输入两个单词,然后计算它们之间的编辑距离。返回字符串列表,即字路径。此时细节并不重要,但我正在研究如何显示结果。无论长度如何,我都希望它们能够居中。我还必须处理字符串宽度对于对话框窗口来说太大的情况,因此输入也很好。现在我只使用一个AnchorPane和Labels,我很确定它太简单了,我想要一些更好的方法来做这个。
编辑:还有一个问题,当对话框第一次弹出时,标签不存在,然后一旦点击它们就会出现。
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 :(得分:1)
您可以在AnchorPane
中设置节点的布局x和y属性。它导致给他们固定的位置,他们不能居中。替代方法是使用VBox
和HBox
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);
}
答案 1 :(得分:0)
不是解决方案,但您可能想要检查buildResultString中的空列表。
// delete last ->
if (sb.length() > 0)
sb.delete(sb.length() - 4, sb.length() - 1);