web-dev-qa-db-ja.com

複数行テキストを表示するためのコントロール?

複数行の読み取り専用テキストを表示する必要があります-どのコントロールを使用できますか?ラベルのようにテキストを表示するだけですが、ラベルは複数行をサポートしていませんか?

ヒントをありがとう:-)

37
stefan.at.wpf

Label で複数行の読み取り専用テキストを表示できます。

テキストに\n(改行)文字が含まれている場合、ラベルは改行文字がある場所で改行されます。

ラベルの wrapText がtrueに設定されていて、1行のテキストを表示するのに十分なスペースがない場合、ラベルはテキストを新しい行に折り返します。


異なるスタイルのテキストが必要な場合、JavaFX 2を使用している場合は FlowPane に複数のラベルを配置します。またはJava 8 +、ラベルを TextFlow コンポーネントに配置します。


lovemenot

次のコードによって生成されます:

import javafx.scene.Scene;

import javafx.application.Application;
import javafx.scene.control.Label;
import javafx.scene.image.*;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class LoveMeNot extends Application {

  public static void main(String[] args) throws Exception { launch(args); }

  @Override public void start(final Stage stage) throws Exception {
    Label label = new Label(WORDS);
    label.setWrapText(true);
    label.setStyle("-fx-font-family: \"Comic Sans MS\"; -fx-font-size: 20; -fx-text-fill: darkred;");

    ImageView image = new ImageView(IMAGE);
    image.setOpacity(0.3);

    StackPane layout = new StackPane();
    layout.setStyle("-fx-background-color: mistyrose; -fx-padding: 10;");
    layout.getChildren().setAll(image, label);

    stage.setTitle("Love Me Not");
    stage.setScene(new Scene(layout));
    stage.show();
  }

  // creates a triangle.
  private static final String WORDS = 
    "Love not me for comely grace,\n" +
    "For my pleasing eye or face,\n" +
    "Nor for any outward part,\n" +
    "No, nor for my constant heart,\n" +
    "For these may fail, or turn to ill.\n" +
    "So thou and I must sever.\n" +
    "Keep therefore a true woman’s eye,\n" +
    "And love me still, but know not why,\n" +
    "So hast thou the same reason still\n" +
    "To doat upon me ever.";

  private static final Image IMAGE = 
    new Image("http://icons.iconarchive.com/icons/artdesigner/gentle-romantic/256/rose-icon.png");
}

上記のプログラムを実行し、ウィンドウのサイズを変更して、ラベルのwrapTextプロパティと同様に、ラベルのテキスト内の\n改行値の効果を確認してください。 wrapText設定をtrueからfalseに変更して、wrapTextのオンとオフの切り替えの違いを確認します。

64
jewelsea

テキストに\ n(改行)文字が含まれている場合、ラベルは改行文字がある場所に改行を付けて改行します。

FXMLファイルおよびビジュアルFXMLエディターからテキストを設定する場合は機能しません。

6
Steel Rat

Labelに必要な最大幅を設定する場合、setWrapTexttrueに設定して、複数行のテキストを表示します。

Label label = new Label("Your long text here");
label.setMaxWidth(180);
label.setWrapText(true);
5
Issam El omri

Text を使用して、必要に応じて wrappingWidthProperty を設定することにより、複数行で表示することもできます。

Text text = new Text();
text.wrappingWidthProperty().set(345);

このコードでは、最大幅を345.0に設定しているため、テキストのサイズが345を超えると、ピクセルは次の行に折り返されます。

3
guru_001

テキストクラスも利用できます。この答えの良い説明 label-and-text-differences-in-javafx 入力を取得していない場所には基本的にテキストを使用します。それ以外の場合はラベルの方が優れています。

0
SystemsInCode