java - 在 JavaFX 中保持可变长度字符串居中(使用标签)

标签 java layout javafx fxml scenebuilder

我正在使用 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/

相关文章:

java - 将仅包含值 0 和 1 的整数类型数组转换为字符串,该字符串应该是 java 中字符串形式的数组值的简单序列

java - 滑动刷新后加载更多不起作用

java - Scenebuilder/JavaFX 多边形鼠标事件 onClick

JavaFX - 在 TreeView 中上下移动 TreeItem

java - 在 Java 中确定文件的物理位置和设备状态

android - 如何在android中将布局的宽度和高度设置为百分比?

android - 在编辑文本android上设置最小高度和布局重量

xml - 比 Eclipse 中更好的 Android XML 布局编辑器

JavaFX8 DatePicker 按钮大小改变

java - 代表球队和球员的数据结构