2011-07-29 21 views
5

Quiero dejar el borde predeterminado en mi JButton s, pero pon espacio vacío alrededor de ellos también. Estoy usando un BoxLayout vertical.¿Cómo puedo agregar un espacio alrededor del borde de un Jbutton?

  • originalmente me dijeron nada acerca de las fronteras, y tiene un solo píxel LineBorder s, que quiero, pero todos los botones topa uno contra el otro.

  • Probé button[i].setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)). En lugar de agregar espacio en blanco alrededor del botón, expandió las áreas de los botones. También eliminó el LineBorder.

  • Entonces intenté: button[i].setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5), button.getBorder()))

Esto me devolvió la LineBorder, pero en lugar de añadir espacio en blanco fuera de la línea, sólo se extendió áreas los botones más allá de la línea!

Me doy cuenta de que puedo agregar cuadros en blanco para espaciar mis botones, pero también quiero espacio en los lados de ellos, por lo que quiero agregar un EmptyBorder. Soy nuevo en Swing, así que tal vez haya una manera mejor de hacer esto que no sé :)

Estoy usando Jython, pero la API debe ser la misma que la de Java.

Respuesta

4

Conceptualmente, los "bordes vacíos" que desea agregar no son realmente parte del botón (por ejemplo, no se debe poder hacer clic en ellos).

Esto es realmente una cuestión de diseño, por lo que probablemente debería verificar la documentación del administrador de diseño que está utilizando. Por ejemplo:

Y así sucesivamente.

+0

Hmmm. Cuando hago clic en el botón fuera del borde de la línea, ¿todavía funciona? FlowLayout no te permite organizar cosas verticalmente, ¿verdad? –

+0

@CamJackson: FlowLayout no te permite organizar las cosas verticalmente, pero BoxLayout sí. – Grodriguez

+0

Gracias, parece que la respuesta es básicamente '¡Encuentra un mejor diseño!' : P –

3

Creo que es más sencillo agregar el botón a un panel y establecer el borde vacío en el panel.

+0

Esto podría funcionar también. El borde del panel sería entonces un interior vacío dentro de un grabado, dentro de un título, dentro de un espacio vacío (espacio en el exterior del panel). ¿Estoy 'Haciéndolo mal' si tengo cuatro capas de anidación en mis bordes? –

+0

Múltiples capas está bien. Incluso crearía un componente personalizado. MyBorderedButton extiende JPanel y lo usa en lugar del botón donde es necesario. – StanislavL

+0

@StanislavL: Me resulta confuso tener una subclase XXXButton que en realidad es un JPanel (y no una subclase de Button). Por ejemplo, ¿adjuntaría un oyente de acción a su MyBorderedButton, o al botón adentro? – Grodriguez

Cuestiones relacionadas