Это javafx8, я должен написать это здесь, так как у меня недостаточно rep, чтобы использовать тег.Как сделать Vbox использовать все пространство
Простой пример:
public class Test extends Application
{
public static void main(String args[]) throws Exception { launch(args); }
private Canvas canvas;
@Override
public void start(Stage primaryStage)
{
VBox box = new VBox();
Button dummyButton = new Button("some text");
canvas = new Canvas();
canvas.heightProperty().addListener(observable -> draw());
canvas.widthProperty().addListener(observable -> draw());
VBox.setVgrow(canvas, Priority.ALWAYS);
box.getChildren().addAll(dummyButton, canvas);
Scene scene = new Scene(box, 1300, 800);
primaryStage.setScene(scene);
primaryStage.show();
}
private void draw()
{
final double width = canvas.getWidth();
final double height = canvas.getHeight();
System.out.println("w, h: " + width + "; " + height);
final GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setFill(Color.GREENYELLOW);
gc.fillRect(0, 0, width, height);
}
}
Я, наверное, неправильно поняли documentation of vbox, в нижней части он говорит, что
Например, если VBox нуждается в ListView, чтобы выделить все дополнительное пространство
, а затем делает эту вещь VBox.grow, как и в моем примере. Но полотно никогда не меняет его размер. Он всегда имеет ширину и высоту 0, в то время как я ожидал, что холст будет расти и уменьшаться при изменении размера окна.
Как я могу получить свой холст (и, я думаю, с этим также моим vbox), чтобы использовать все имеющееся вертикальное пространство.
Пожалуйста, не предлагайте использовать основную ступень, в моем реальном приложении. Я так много слоев, что есть много других элементов между ними. Первичный этап только здесь, чтобы иметь запущенную программу.
спасибо. Собираюсь попробовать это завтра. – Nozdrum