Моя первая попытка играть с JavaFX, и я пытаюсь понять немного о макетировании. Как получить доступ к предпочтительному размеру элемента управления?Каков предпочтительный размер элемента управления?
В приведенном ниже примере я пытаюсь установить максимальную ширину на 200 пикселей больше, чем предпочтительная ширина. То есть, я хочу, чтобы кнопка увеличивалась (до максимума) по мере увеличения ширины кадра.
Однако, когда я бегу код предпочтительным ширина равен -1, так что добавление 200 к предпочтительной ширине дает максимальную ширину 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);
}
}
При запуске код и нажать на кнопку я вижу : Width: 139.0
После того как я изменить ширину кадра, так что кнопка как можно больше, и я нажмите на кнопку Я вижу: Width: 199.0
Я надеялся увидеть Width: 339.0
(т.е. 139 + 200.)
Итак, как мы получаем доступ к предпочитаемому размеру/ширине элемента управления?
Вы говорите, что 'prefWidth (-1)' будет возвращать '-1' (или некоторую другую недопустимую ширину) до тех пор, пока экран не будет отображаться? –
PrefWidth (-1) был методом, который я искал. Слишком плохо, что оно не имеет значения до тех пор, пока не будет показана этап: (переопределение метода 'computeMaxWidth (...)' похоже на лучшее решение для данного примера, но я не знал, как реализовать этот метод без метода prefWidth (...) (+1). – camickr
@JAtkin, Да, я только что изменил свой SSCCE, чтобы отобразить prefWidth (-1) после создания кнопки, и отображает 0. Когда я показываю ширину после show() отображает 138.238 .... – camickr