2011-03-03 171 views
5

Me gustaría saber cómo eliminar los márgenes entre mi JtabbedPane y mi panel de contenido JFrame y entre mi JTabbedPane y su JPanel interno. Di la vuelta a los márgenes que quiero eliminar. la línea verde está aquí para mostrar la brecha entre el jpanel dentro del jtabbedpane.Java: eliminar margen/relleno en un JTabbedPane

Traté de ver algún método llamado setMargin pero no existe en un JTabbedPane. También verifiqué Hgap y Vgap (both = 0) en el diseño diferente (panel de contenido raíz, mi jpanel, etc.).

Así que cualquier sugerencia es bienvenida. Gracias.

The image is here. No puedo publicar imágenes todavía

+0

que tiene un vivo ejemplo? si tiene, envíenos un enlace y puedo resolver su problema de CSS. – bluefoot

+0

JAVA ...y hay un enlace – florian

Respuesta

7

Depende de la apariencia decidir cuánto espacio hay alrededor de los componentes dentro de un panel con pestañas; generalmente lo hará en función de lo que sea el predeterminado para su escritorio. JTabbedPane no tiene métodos para configurar las inserciones alrededor de los componentes internos.

Usted puede conjunto esta forma global para todos los paneles con separadores (advertencia: Funciona en MetalLookAndFeel, será probablemente trabajo para Windows L & F, así, probablemente no habrá trabajo para GTK o Nimbus apariencia cuales no están basados ​​en BasicLookAndFeel). Esto va a cambiar la apariencia de todos los paneles con solapas en la VM:

UIManager.getDefaults().put("TabbedPane.contentBorderInsets", new Insets(0,0,0,0)); 
UIManager.getDefaults().put("TabbedPane.tabsOverlapBorder", true); 

Probablemente también querrá asegurarse de que su JTabbedPane tiene una EmptyBorder (0,0,0,0) y también lo hacen los componentes que ponen en eso.

Si esto no funciona en el escritorio de destino, las alternativas son

  • si no se preocupa por sus paneles con solapas mirando diferentes de aplicación nativa paneles con pestañas, la alternativa (desagradable) es escribir su propio TabbedPaneUI
  • establece el delegado de interfaz de usuario para el single JTabbedPane desea tener este aspecto a MetalTabbedPaneUI o algún otro delegado interfaz de usuario que hace responden a estas propiedades
+0

Gracias también. Tu solución me ayuda a deshacerme del espacio superior blanco. – florian

1

Los márgenes se agregan al establecer bordes en los elementos de la interfaz de usuario. Eche un vistazo a la configuración del borde de su JTabbedPane.

+0

Gracias por su respuesta, puedo eliminar el borde poniendo valores negativos para las propiedades "derecha" e "inferior". Creo que es un poco extraño hacer esto. – florian

4

acabo hirió al mismo problema, y ​​nada que nadie más ha dicho que parecía ser una solución completa, por lo que se le ocurrió esto:

import javax.swing.plaf.basic.BasicTabbedPaneUI; 

    tabbedPane.setUI(new BasicTabbedPaneUI() { 
     private final Insets borderInsets = new Insets(0, 0, 0, 0); 
     @Override 
     protected void paintContentBorder(Graphics g, int tabPlacement, int selectedIndex) { 
     } 
     @Override 
     protected Insets getContentBorderInsets(int tabPlacement) { 
      return borderInsets; 
     } 
    }); 

Funciona de la misma sin reemplazando el método paintContentBorder, sin embargo, haciendo así que probablemente hace que el UI ligeramente más eficiente durante el cambio de tamaño o similar, ya que el estándar parece delegar en una cantidad de otros métodos.

Probado en Oracle Java 6 U43 para Linux en WindowMaker, Mac OS X 10.6.7 con Mac Java 6 U37 y Windows 7 con Java 7 u07, espero que esto ayude a alguien :-)

+0

Mientras esto funciona para eliminar el borde, también cambia la interfaz de usuario en las pestañas reales. –

Cuestiones relacionadas