JavaFX:Ajuste elementos filho para HBox largura
Pergunta
É possível gerenciar os elementos filho em um HBox, de modo que a soma das larguras de todas as crianças de elementos é igual à largura do HBox?
De modo que elementos preencher o HBox e nenhum espaço é deixado.
A altura dos elementos da criança é, por padrão, a altura do HBox, assim como sobre a largura?Eu não quero calcular a largura no meu programa.Seria melhor se o layout faz isso automaticamente, de modo que nenhum cálculo é necessário.
Solução
Isto depende de que tipo de crianças, o HBox
conter.Algumas das crianças não pode ser redimensionado nós.No entanto, de um modo geral, você pode usar HBox.setHgrow()
método e definir o mesmo Priority
para todas as crianças de hbox.A explicação está no seu javadoc:
Define a horizontal crescer prioridade para a criança, quando contido por um hbox.Se definido, o hbox vai usar a prioridade a atribuir adicionais o espaço se o hbox é redimensionada maior do que a largura desejada.Se vários hbox as crianças têm o mesmo horizontal crescer prioridade, e , em seguida, o espaço extra será divisão noite entre eles.Se não horizontal crescer prioridade é definida em uma criança, o hbox nunca vai alocar adicionais de espaço horizontal, se disponível.Se definir o valor null irá remover a restrição.
Além disso, se você está tentando obter uma grade, como layout, em seguida, tente outras opções de layout, por exemplo TilePane
ou FlowPane
e talvez GridPane
.
Outras dicas
O código simples para que a sua resposta seria esta:
Button button1 = new Button("Save");
Button button2 = new Button("Delete");
HBox.setHgrow(button1, Priority.ALWAYS);
HBox.setHgrow(button2, Priority.ALWAYS);
É recomendado o uso de HBox classe em vez do nome de HBox painel.
No FXML
:
<HBox>
<Label HBox.hgrow="ALWAYS" maxWidth="Infinity">
TEST
</Label>
</HBox>
Adicionar a @bdshahab da resposta, uma vez que HBox vai tentar redimensionar seus filhos preferencial larguras, eles só preencher a caixa se sua combinação preferida larguras são mais largos do que o HBox largura.
Assim, pode ser necessário fazer algo como:
Button button1 = new Button("Save");
Button button2 = new Button("Delete");
HBox.setHgrow(button1, Priority.ALWAYS);
HBox.setHgrow(button2, Priority.ALWAYS);
button1.setPrefWidth(100000);
button2.setPrefWidth(100000);