Подтвердить что ты не робот

Управление отображением многострочного текста?

Мне нужно отобразить многострочный текст только для чтения - какой контроль можно использовать для этого? Он должен только выкладывать текст, как это делает Label, однако Label не поддерживает многострочный?

Спасибо за любой намек: -)

4b9b3361

Ответ 1

Вы можете отображать многострочный текст только для чтения в Label.

Если в тексте есть символы \n (новая строка), тогда метка будет переноситься на новую строку везде, где символ новой строки.

Если метка имеет wrapText, значение true и недостаточно места для отображения одной строки текста, тогда метка будет заверните текст в новую строку.


Если вам нужен текст в разных стилях, то, если вы используете 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");
}

Попробуйте запустить указанную выше программу и измените ее размер, чтобы увидеть эффект значений \n новых строк в тексте меток, а также свойство wrapText на ярлыке. Измените параметр wrapText с true на false, чтобы увидеть разницу между включением и выключением wrapText.

Ответ 2

Если в тексте есть символы \n (новая строка), то метка помещает wrap в новую строку, где бы символ новой строки не был.

Не работает, когда вы устанавливаете текст из файла FXML, а также из визуального редактора FXML.

Ответ 3

Вы устанавливаете максимальную ширину, которую хотите для своей метки, тогда вы ставите true в "setWrapText", чтобы отобразить текст в многострочном формате:

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

Ответ 4

Вы также можете использовать Text для отображения в многострочном формате, установив wrappingWidthProperty в соответствии с вашими
Применение.

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

В этом коде я установил максимальную ширину в 345,0, поэтому, когда размер текста достигнет 345 пикселей, он будет перенесен в следующую строку.

Ответ 5

Также доступен текстовый класс. Хорошее объяснение в этом ответе label-and-text-difference-in-javafx В основном используйте текст, в котором вы не вводите ввод, в противном случае ярлык лучше.