Comment créer une TextArea
prendre toute la largeur et la hauteur du volet parent.
J'ai essayé ceci:
TextArea textArea = new TextArea();
textArea.setScaleX( 100 );
textArea.setScaleY( 100 );
mais l'élément défini dans la partie supérieure via parent.setTop(...)
était couvert.
La réduction de scaleY
n'a eu aucun effet.
Que dois-je faire d'autre pour y parvenir?
Merci
résolu avec cette
textArea.setPrefSize( Double.MAX_VALUE, Double.MAX_VALUE );
La solution MAX_VALUE est un peu compliquée et peut entraîner des problèmes de performances. En outre, la réponse à cette question pourrait dépendre de votre conteneur parent. Quoi qu'il en soit, une meilleure façon de le faire serait la suivante:
textArea.prefWidthProperty().bind(<parentControl>.prefWidthProperty());
textArea.prefHeightProperty().bind(<parentConrol>.prefHeightProperty());
Vous pouvez également vouloir lier les propriétés préférées aux propriétés réelles, en particulier si le parent utilise ses dimensions calculées plutôt que celles explicites:
textArea.prefWidthProperty().bind(<parentControl>.widthProperty());
textArea.prefHeightProperty().bind(<parentConrol>.heightProperty());
Il est également possible de le faire sans utiliser de liaison en surchargeant la méthode layoutChildren () du conteneur parent et en appelant
textArea.resize(getWidth(), getHeight());
N'oubliez pas d'appeler super.layoutChildren () ...
Pour ce faire, vous placez la TextArea
dans une BorderPane
.
Stage stage = new Stage();
stage.setTitle("Resizing TextArea");
final BorderPane border = new BorderPane();
Scene scene = new Scene(border);
TextArea textArea = new TextArea();
textArea.setStyle("-fx-background-color: #aabbcc;");
border.setCenter(textArea);
primaryStage.setScene(scene);
primaryStage.setVisible(true);
Vous pouvez également le placer dans une HBox
ou une VBox
. Ensuite, le redimensionnement est limité à la direction horizontale/verticale. Pas sûr que ce soit un problème.
<TextArea style="-fx-pref-height: 10px;"/>