Ho un problema con JavaFX (8), HBox, ComboBox e HGrow. HGrow non funziona in combinazione con ComboBox.
(INFO: con TextField (invece di ComboBox), funziona come previsto)JavaFX - Come rendere ComboBox hgrow?
Questo è il mio FXML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<VBox prefHeight="117.0" prefWidth="285.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.test.TestController">
<children>
<HBox prefHeight="105.0" prefWidth="196.0" VBox.vgrow="ALWAYS">
<children>
<ComboBox fx:id="fxCboTest" prefHeight="25.0" prefWidth="62.0" HBox.hgrow="ALWAYS" />
</children>
</HBox>
</children>
</VBox>
presente Codice si tradurrà in:
ho anche provato il seguente codice (senza esito positivo, questo codice non fa nulla):
HBox.setHgrow(uiController.fxCboTest, Priority.ALWAYS);
Qualcuno ha un'idea di come realizzare un ComboBox HGrow?
'hgrow' non sovrascrive la larghezza massima di un nodo ridimensionabile, che per impostazione predefinita è impostata sulla dimensione preferita. Ci sono alcune informazioni su questo [tutorial] (http://docs.oracle.com/javase/8/javafx/layout-tutorial/size_align.htm#JFXLY133) e anche un'eccellente [presentazione a Parleys] (https: //www.parleys.com/tutorial/interface-layout-javafx-2-0) (è richiesta la registrazione). –
Quindi, perché funziona quando si sostituisce semplicemente ComboBox con TextField in XML? – Ben
Scavate un po 'di più nelle impostazioni predefinite. I valori predefiniti di 'maxWidth' per entrambi al valore sentinella' Region.COMPUTED_SIZE', che provoca una chiamata a 'computeMaxWidth (...)'. Per i controlli, a sua volta delegati all'implementazione della skin.Scavando nel codice sorgente, 'ComboBoxBaseSkin' risolve questo restituendo la larghezza preferita; il 'TextFieldSkin' eredita l'implementazione predefinita' SkinBase', che restituisce 'Double.MAX_VALUE'. Quindi una casella combinata per impostazione predefinita è limitata alla sua dimensione preferita; un campo di testo può crescere indefinitamente. La linea di fondo è che hanno diversi valori di default. –