controls - setgraphic - Control para mostrar texto de líneas múltiples
setgraphic javafx (5)
Necesito mostrar un texto multilínea, de solo lectura, ¿qué control se puede usar para eso? Solo debería dislayar el texto, como lo hace una etiqueta, sin embargo, Label no admite multilínea.
Gracias por cualquier pista :-)
Si el texto tiene caracteres / n (nueva línea), la etiqueta colocará el ajuste en una nueva línea donde esté el carácter de nueva línea.
No funciona cuando configura texto desde el archivo FXML, así como desde el editor FXML visual.
Clase de texto también disponible. Una buena explicación en esta respuesta label-and-text-differences-in-javafx Básicamente usa Text para donde no label-and-text-differences-in-javafx entrada, de lo contrario Label es mejor.
Si establece el ancho máximo que desea para su Label
, establece setWrapText
en true
para que muestre el texto multilínea:
Label label = new Label("Your long text here");
label.setMaxWidth(180);
label.setWrapText(true);
También puede usar el Text
para que aparezca en líneas múltiples, configurando wrappingWidthProperty
según sus necesidades.
Text text = new Text();
text.wrappingWidthProperty().set(345);
En este código, he establecido el ancho máximo en 345.0
, por lo que cuando el tamaño del texto supera los 345
píxeles se ajustará a la siguiente línea.
Puede mostrar texto de solo lectura de varias líneas en una Label
.
Si el texto tiene caracteres /n
(nueva línea), la etiqueta se ajustará a una nueva línea donde sea que esté el carácter de nueva línea.
Si la etiqueta tiene wrapText
establecido en verdadero y no hay espacio suficiente para mostrar una sola línea de texto, la etiqueta ajustará el texto a una nueva línea.
Si desea texto en diferentes estilos, entonces, si utiliza JavaFX 2, coloque varias etiquetas en un FlowPane
o, si está utilizando Java 8+, coloque las etiquetas en un componente TextFlow
.
Producido por el siguiente código:
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");
}
Intente ejecutar el programa anterior y cambie el tamaño de la ventana para ver el efecto de los /n
nuevos valores de línea en el texto de la etiqueta, así como también la propiedad wrapText
en la etiqueta. Varíe la configuración de wrapText
de verdadero a falso para ver la diferencia entre tener activado y desactivado wrapText
.