web-dev-qa-db-fra.com

javaFX 2.0 définit le composant sur toute la largeur et la hauteur du parent immédiat

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

13
Farouk Alhassan

résolu avec cette

textArea.setPrefSize( Double.MAX_VALUE, Double.MAX_VALUE );
11
Farouk Alhassan

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 () ...

25
kylejmcintyre

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.

2
pmoule
<TextArea style="-fx-pref-height: 10px;"/>
0
Jeeva