我需要显示多行,只读文本 - 哪个控件可用于此?它应该只显示文本,就像Label一样,但Label不支持多行?
感谢任何提示: - )
答案 0 :(得分:60)
您可以在Label
。
如果文本中包含\n
(换行符)字符,那么无论换行符在哪里,标签都会换行到新行。
如果标签的wrapText
设置为true且没有足够的空间显示单行文本,则标签会将文本换行到新行。
如果您想要不同样式的文本,那么,如果使用JavaFX 2,请在FlowPane
中放置多个标签,或者,如果您使用的是Java 8+,请将标签放在TextFlow
组件中。
由以下代码制作:
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
之间的区别。
答案 1 :(得分:6)
如果文本中有\ n(换行符)字符,则标签将换行符放在换行符所在的任何位置。
当您从FXML文件以及Visual FXML编辑器设置文本时,它不起作用。
答案 2 :(得分:5)
如果您为Label
设置了所需的最大宽度,则将setWrapText
设置为true
,以便显示文字多行:
Label label = new Label("Your long text here");
label.setMaxWidth(180);
label.setWrapText(true);
答案 3 :(得分:3)
您还可以根据需要设置Text
,以多行显示wrappingWidthProperty
。
Text text = new Text();
text.wrappingWidthProperty().set(345);
在此代码中,我将最大宽度设置为345.0
,因此,当文字的大小超出345
时,像素将被包裹到下一行。
答案 4 :(得分:0)
文字课也可用。这个答案中的一个很好的解释label-and-text-differences-in-javafx基本上使用Text来表示你没有得到输入,否则Label会更好。