una section secciones pagina ejemplos dividir como css javafx tabs size

section - javafx css themes



La pestaña JavaFX se ajusta al tamaño completo del encabezado (2)

Quiero que las pestañas de mi tabular coincidan con el tamaño completo de la pestaña en la que se encuentran. Así que, básicamente, no habrá un área de encabezado visible, todo debería estar cubierto por las pestañas.

Tengo 2 problemas aquí:

  • ¿Cómo puedo hacer que las pestañas se ajusten dinámicamente al ancho de la pestaña?
  • ¿Cómo puedo ajustarlos a la altura correcta y eliminar los pequeños espacios entre las pestañas? Supongo que esto se hace a través de CSS, pero no sé cómo.

saluda


No estoy seguro de si esto es factible en CSS, y podría haber una manera más simple en Java para hacer esto, pero escribí una clase que amplía TabPane para extender las pestañas y llenar todo el espacio.

public class StretchedTabPane extends TabPane { public StretchedTabPane() { super(); setUpChangeListeners(); } public StretchedTabPane(Tab... tabs) { super(tabs); setUpChangeListeners(); } private void setUpChangeListeners() { widthProperty().addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> value, Number oldWidth, Number newWidth) { Side side = getSide(); int numTabs = getTabs().size(); if ((side == Side.BOTTOM || side == Side.TOP) && numTabs != 0) { setTabMinWidth(newWidth.intValue() / numTabs - (20)); setTabMaxWidth(newWidth.intValue() / numTabs - (20)); } } }); heightProperty().addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> value, Number oldHeight, Number newHeight) { Side side = getSide(); int numTabs = getTabs().size(); if ((side == Side.LEFT || side == Side.RIGHT) && numTabs != 0) { setTabMinWidth(newHeight.intValue() / numTabs - (20)); setTabMaxWidth(newHeight.intValue() / numTabs - (20)); } } }); getTabs().addListener(new ListChangeListener<Tab>() { public void onChanged(ListChangeListener.Change<? extends Tab> change){ Side side = getSide(); int numTabs = getTabs().size(); if (numTabs != 0) { if (side == Side.LEFT|| side == Side.RIGHT) { setTabMinWidth(heightProperty().intValue() / numTabs - (20)); setTabMaxWidth(heightProperty().intValue() / numTabs - (20)); } if (side == Side.BOTTOM || side == Side.TOP) { setTabMinWidth(widthProperty().intValue() / numTabs - (20)); setTabMaxWidth(widthProperty().intValue() / numTabs - (20)); } } } }); } }

Esto ajustará automáticamente el ancho de cada pestaña cuando cambie la altura, el ancho o el número de pestañas.


Es cierto, los objetos de propiedad de las pestañas son READ-Only. Esto significa que no puede configurar manualmente las propiedades. Sin embargo, los valores de las propiedades de solo lectura pueden vincularse a otras propiedades, también las propiedades tienen algunos métodos de manipulación, por ejemplo, dividir, restar, compruebe la documentación para obtener información ampliada.

Puede llamar a .tabminWidthProperty() en el tabulador y vincularlo al valor de propiedad de ancho del elemento primario del diseño.

Aquí está el código para clasificar todas las pestañas disponibles que llenan igualmente toda la pantalla:

tabpane.tabMinWidthProperty().bind(root.widthProperty().divide(tabpane.getTabs().size()).subtract(20));

Restaba 20 para evitar la barra de desplazamiento horizontal / vertical. Seguramente también hay una manera de desactivarlos para que aparezcan, pero soy un desarrollador de Android y un novato en JavaFx.