Il mio primo tentativo di giocare con JavaFX e sto cercando di capire un po 'sulla gestione del layout. Come possiamo accedere alla dimensione preferita di un controllo?Qual è la dimensione preferita di un controllo?
Nell'esempio seguente sto tentando di impostare la larghezza massima di 200 pixel superiore alla larghezza preferita. Cioè, voglio consentire al pulsante di crescere (fino ad un massimo) man mano che aumenta la larghezza del frame.
Tuttavia quando si esegue il codice della larghezza preferita è -1, quindi aggiungendo 200 alla larghezza preferito dà una larghezza massima di 199.
import javafx.application.Application;
import javafx.event.*;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.geometry.Insets;
public class BorderPaneSSCCE extends Application
{
@Override
public void start(Stage primaryStage)
{
Button button = new Button("Button at PreferredSize");
button.setMaxWidth(button.getPrefWidth() + 200);
System.out.println(button.prefWidth(-1) + " : " + button.getPrefWidth());
button.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent event)
{
System.out.println("Width: " + button.getWidth());
}
});
HBox root = new HBox();
HBox.setHgrow(button, Priority.ALWAYS);
root.getChildren().add(button);
Scene scene = new Scene(root);
primaryStage.setTitle("Java FX");
primaryStage.setScene(scene);
primaryStage.show();
System.out.println(button.prefWidth(-1) + " : " + button.getPrefWidth());
}
public static void main(String[] args)
{
launch(args);
}
}
Quando si esegue il codice e clicca sul pulsante vedo : Width: 139.0
Dopo che ho ridimensionare la larghezza del telaio in modo che il pulsante è il più grande possibile e cliccare sul pulsante che vedo: Width: 199.0
speravo di vedere Width: 339.0
(cioè 139 + 200).
Quindi, come si accede alla dimensione/larghezza preferita di un controllo?
Stai dicendo che 'prefWidth (-1)' restituirà '-1' (o qualche altra larghezza non valida) fino a quando lo schermo non sarà reso? –
Il prefWidth (-1) era il metodo che stavo cercando. Peccato che non abbia un valore finché non viene mostrato lo Stage :(L'override del metodo 'computeMaxWidth (...)' sembra la soluzione migliore per l'esempio dato, ma non sapevo come implementare quel metodo senza il metodo prefWidth (...) (+1). – camickr
@JAtkin, Sì, ho appena cambiato il mio SSCCE per visualizzare il prefWidth (-1) dopo che il pulsante è stato creato e visualizza 0. Quando visualizzo la larghezza dopo il show() metodo mostra 138.238 .... – camickr