2009-06-03 25 views
14

Quiero un comportamiento similar a, p. Firefox donde la lista de pestañas disponibles solo aparece si existen al menos dos pestañas.¿Hay alguna manera de ocultar la barra de pestañas de JTabbedPane si solo existe una pestaña?

No he podido encontrar nada como eso, todavía.

La mejor idea que tenía estaba cambiando el diseño de forma manual:

  • en el caso de un componente, sólo tiene que añadir que al panel que rodea
  • si se añade un componente, retire el componente del panel que rodea , agregue un JTabbedPane en su lugar y agregue tanto el componente anterior como el nuevo a ese panel.
  • si se elimina un componente y solo queda un componente en el panel, elimine el panel y agregue el componente contenido en su lugar.

Si bien esto probablemente funcionaría se siente como un corte o una solución ...

Cualquier idea mejor?

Una solución ideal debería funcionar tanto en Java 1.5 como en la versión 1.6 ... pero también me gustaría una solución de solo 1.6.

Respuesta

5

Creo que tendrá que hacerlo manualmente. Aparentemente it has been done before, pero solo como un pequeño sistema que parece no estar disponible.

Su enfoque se ve bien para mí. Lo haría como lo planteaste, y envolveré toda esa lógica en un JComponent personalizado para que se sienta menos hambriento.

+0

voy a esperar un poco más para ver si alguien tiene una idea brillante antes de comprobar la respuesta ... – Huxi

+0

Estoy de acuerdo con @mmyers. Si alguien tiene un componente precompuesto para hacer esto, estaría bastante seguro de que funcionó de esta manera. – banjollity

+0

Gracias, supongo que realmente no hay otra manera ... – Huxi

5

Puede ser mejor que simplemente usando CardLayout.

+0

Buena idea general, pero quiero tener un JTabbedPane incl. las diversas miradas con respecto a PLAF. De todos modos, tu opinión es apreciada. – Huxi

+0

+1 para esto es lo que habría hecho – willcodejavaforfood

+0

Simplemente jTabbedPane1.setLayout (nuevo CardLayout()); +50! –

1

Otra opción sería personalizar el delegado L & F (ya sea BasicTabbedPaneUI o WindowsTabbedPaneUI según las plataformas que le interesan) utilizado por JTabbedPane. Esto le permitiría personalizar el comportamiento del panel con pestañas en el caso en que solo se mostraba una sola pestaña.

Esta es otra forma de hacer las cosas, sin embargo, diría que es una empresa y que hacer lo que Michael dijo te llevará a donde quieres ir con mucho menos esfuerzo. Solo quería publicar esto como una respuesta en caso de que no tuvieras conocimiento de esta opción.

1

Creo que esto se puede lograr utilizando la barra de pestañas y un diseño de tarjeta,

  • añadir la barra de pestañas y el diseño de tarjeta a un diseño de bolsa de rejilla para que cambiar el tamaño automáticamente
  • la altura máxima de la barra de pestañas debe ser la altura de la pestaña
  • añadir un detector de barra de pestañas para que cuando ciertas pestañas se hace clic en él se cambiará el diseño de la tarjeta para mostrar el contenido adecuado
  • ocultar la barra de pestañas si sólo tiene una pestaña

y esto debería hacer el trabajo.

11

se puede anular el método de interfaz de usuario que calcula la altura del área del botón ficha, obligando a la altura 0 cuando sólo 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; 
    } 
}); 
+1

Esto funciona, pero tenía un borde superior delgado de color en mi TabbedPane que se dejó en el área donde solía estar la pestaña. Probar un poco y hacer casi la misma anulación para 'paintTabBorder' y 'paintTabBackground' resolvió el problema. – zoidbeck

Cuestiones relacionadas