pestañas - tabbed java
¿Hay alguna forma de ocultar la barra de pestañas de JTabbedPane si solo existe una pestaña? (7)
Creo que esto se puede lograr usando la barra de pestañas y un diseño de tarjeta,
- agregue la barra de pestañas y el diseño de la tarjeta al diseño de la bolsa de la cuadrícula para que se redimensionen automáticamente
- la altura máxima de la barra de pestañas debe ser la altura de la pestaña
- agregue un oyente a la barra de pestañas para que cuando haga clic en ciertas pestañas, cambie el diseño de la tarjeta para mostrar el contenido apropiado
- Oculta la barra de pestañas si solo tiene una pestaña.
Y esto debería hacer el trabajo.
Quiero un comportamiento similar a, por ejemplo, Firefox donde la lista de pestañas disponibles solo se muestra si existen al menos dos pestañas.
Todavía no pude encontrar nada de eso.
La mejor idea que tuve fue cambiar el diseño manualmente:
- En el caso de un componente, solo agréguelo al panel que lo rodea.
- si se agrega un componente, elimínelo del panel circundante, agregue un JTabbedPane en su lugar y agregue tanto el componente anterior como el nuevo en ese panel.
- Si se elimina un componente y solo queda un componente en el panel, elimine el panel y agregue el componente contenido.
Si bien esto probablemente funcionaría, se siente como un truco o una solución alternativa ...
¿Alguna idea mejor?
Lo ideal es que una solución funcione tanto en Java 1.5 como en 1.6 ... pero también me gustaría que solo haya una solución 1.6.
Creo que tendrás que hacerlo manualmente. Aparentemente se ha hecho antes , pero solo como un pequeño trozo de un sistema que parece no estar disponible.
Tu enfoque me parece bien. Lo haría tal como lo hizo usted, y envolvería toda esa lógica en un JComponent
personalizado para que se sienta menos intrépido.
Es posible que esté mejor simplemente usando CardLayout
.
Otra opción sería personalizar el delegado de L&F (ya sea BasicTabbedPaneUI o WindowsTabbedPaneUI en función de las plataformas que le interesan) que utiliza JTabbedPane. Esto le permitiría personalizar el comportamiento del panel de pestañas en el caso de que solo se muestre una pestaña.
Esta es otra forma de hacer las cosas, sin embargo, diría que es un gran esfuerzo y hacer lo que Michael dijo que lo llevará a donde quiere ir con mucho menos esfuerzo. Solo quería publicar esto como una respuesta en caso de que no estuviera al tanto de esta opción.
Puede anular el método de interfaz de usuario que calcula la altura del área del botón de la pestaña, forzando la altura a 0
cuando solo hay una pestaña:
tabbed_pane.setUI(new BasicTabbedPaneUI() {
@Override
protected int calculateTabAreaHeight(int tab_placement, int run_count, int max_tab_height) {
if (tabbed_pane.getTabCount() > 1)
return super.calculateTabAreaHeight(tab_placement, run_count, max_tab_height);
else
return 0;
}
});
Sí, hay una manera. Tardé cuatro horas en encontrar el sitio web de oracle: http://docs.oracle.com/javase/7/docs/api/javax/swing/JTabbedPane.html#setTabLayoutPolicy()
Simplemente usa esto:
//declare
private JTabbedPane editor = new JTabbedPane ();
//construct like this:
editor.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
//just add components and see how it goes.
editor.addTab("", newPanel);
jTabbedPane1.removeTabAt(0);
parece funcionar después de initComponents();