【问题标题】:JavaFX Button with multiple text lines具有多个文本行的 JavaFX 按钮
【发布时间】:2015-02-02 10:04:43
【问题描述】:

我需要在我的屏幕上创建一个工具栏,它有多个按钮,每个按钮必须有多行文本。例如:

我查看了 Internet 和 StackOverflow,但找不到任何显示如何在 JavaFX 中执行此操作的内容。我正在使用 JavaFX 8。

有人可以帮帮我吗?

Tks

【问题讨论】:

    标签: java button javafx javafx-8 multiline


    【解决方案1】:

    您也可以使用wrapTextProperty。但是您必须将工具栏高度设置为大于预期的按钮高度。

    Button btn = new Button();
    btn.wrapTextProperty().setValue(true);
    // or btn.setWrapText(true);
    btn.setText("Some looooooooooooong text");
    

    或者如果你想确定该行应该在哪里换行,你可以这样:

    Button btn = new Button();
    btn.setText("Line1\n Line2\n Line3");
    

    最后一种方法可以在不改变工具栏高度的情况下工作。

    【讨论】:

      【解决方案2】:

      根据 sobolev 的回复,您可以:

      Button btn = new Button();
      btn.setText("Line1\n Line2\n Line3");
      button.textAlignmentProperty().set(TextAlignment.CENTER);
      

      这将创建 3 行文本并将它们对齐到按钮的中心。

      【讨论】:

        【解决方案3】:

        在按钮文本属性中选择“切换到多行模式”

        "

        【讨论】:

        • 好建议 :) tnx
        • 或者如果你动态生成按钮,在代码中 button.setWrapText(true);
        【解决方案4】:
        Label label= new Label("your long text here");
        label.setStyle("-fx-max-width : 180px);
        label.setWrapText(true);
        

        【讨论】:

          【解决方案5】:

          我的解决方案与 OP 给出的解决方案几乎相同,但不是 Label 而是使用 Text 因此更改按钮大小更加灵活,因为它将根据需要使用尽可能多的行.如果需要,也可以设置环绕宽度,以定义宽度约束。

          @Override
          public void start(Stage primaryStage) {
              Button btn = new Button();
              ImageView imageView = new ImageView(new Image(getClass().getResource(<image>).toExternalForm()));
              Text text=new Text("Some long text that may be line wrapped");
              text.setWrappingWidth(100);
              VBox vBox = new VBox(5, imageView,text);
              vBox.setAlignment(Pos.CENTER);
              btn.setGraphic(vBox);
              btn.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
          
              Scene scene = new Scene(new StackPane(btn), 300, 250);
          
              primaryStage.setScene(scene);
              primaryStage.show();
          }
          

          【讨论】:

            【解决方案6】:

            我解决了这个问题,包括在我的按钮中包含一个 VBox,然后在 VBox 中包含几个标签。像这样:

            结果是:

            如果有更优雅的方式来获得相同的结果,请告诉我。 谢谢。

            【讨论】:

            • 当我这样做时,VBox 的 toString 方法被调用了。
            猜你喜欢
            • 2023-04-04
            • 2019-09-28
            • 1970-01-01
            • 2012-07-16
            • 1970-01-01
            • 1970-01-01
            • 2021-12-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多