我正在使用 JavaFX 和 SceneBuilder 创建教育文本处理应用程序的前端。对于这部分应用程序,用户输入两个单词,然后计算它们之间的编辑距离。返回作为单词路径的字符串列表。目前具体细节并不重要,但我正在研究如何显示结果。我希望它们无论长度如何都居中。我还必须处理字符串宽度对于对话框窗口来说太大的情况,因此输入也很棒。现在我只使用一个 AnchorPane 和标签,我确信这太简单了,我希望获得一些关于更好的方法的输入。
编辑:还有一个问题是,当对话框第一次弹出时,标签不存在,然后一旦单击,它们就会出现。
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>
最佳答案
您可以在 AnchorPane
中设置节点的布局 x 和 y 属性。结果是给它们固定的位置,并且它们不能居中。另一种方法是结合使用 VBox 和 HBox。并且不要设置 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);
}
关于java - 在 JavaFX 中保持可变长度字符串居中(使用标签),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32386831/