2010-05-21 19 views

Respuesta

3

Esto normalmente se hace usando su administrador de diseño. Por ejemplo, si está usando GridBagLayout, establecería insets en el objeto GridBagConstraint en el valor deseado.

Otra opción es usar el objeto Box y agregar una estructura horizontal o vertical. Ver javadoc para Box.createVerticalStrut(int width) y el createHorizontalStrut similar.

+0

Sí, podría usar 'Box' pero el código será tan feo si tengo muchos márgenes de caja ... – Jonas

+0

¿Has probado usar insets? ¿Qué diseño estás usando actualmente? ¿Qué tan complicada es tu pantalla? –

+0

El diseño es complejo, es una clase de factura que implementa 'Imprimible', así que uso muchos administradores de disposición diferentes,' SpringLayout', 'BorderLayout',' BoxLayout' y así sucesivamente ... Intentaré utilizar Insets, gracias. – Jonas

14

Otra forma de obtener lo que desea es:

  1. obtener la corriente Border de su componente
  2. si null, establezca un EmptyBorder para su componente
  3. si no null, crear una nuevo CompoundBorder (con un EmptyBorder y el actual Border del componente) y configurarlo para el componente

En el código, que debe ser similar que (lo siento, no lo he probado):

Border current = component.getBorder(); 
Border empty = new EmptyBorder(top, left, bottom right); 
if (current == null) 
{ 
    component.setBorder(empty); 
} 
else 
{ 
    component.setBorder(new CompoundBorder(empty, current)); 
} 

Dónde:

  • componente es el componente Swing a al que desea agregar un margen
  • arriba, izquierda, abajo, derecha son los píxeles importes desea agregar alrededor su componente

Tenga en cuenta que este método podría tener un impacto (tamaño, alineación) en el diseño del formulario, dependiendo de la LayoutManager que está utilizando. Pero creo que vale la pena intentarlo.

+0

Este método creaba bordes opacos para mí, no transparentes. Esto fue un problema Usé una versión modificada: en lugar de establecer el borde en el componente, cree un nuevo panel y establezca el borde en ese lugar, y agregue el componente a ese panel. Después de hacer esto, el borde fue transparente como se esperaba. @jfpoilpret ¿Podría actualizar su respuesta? – Loduwijk

Cuestiones relacionadas