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.

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top