2010-06-04 12 views
8

Estoy tratando de poner dos botones dentro de un panel utilizando los widgets Swing. Dentro del IDE de NetBeans, mi propiedad JSeparatorborder está configurada en (No border) en el panel de propiedades.¿Cuál es la mejor manera de poner espacios entre objetos? ¿Puede un objeto Swing JSeparator ser un separador invisible?

Sin embargo, aparece una línea. Esto no es lo que esperaría de un objeto separador. ¿Estoy haciendo algo mal? Viniendo de un fondo en Delphi y C# WinForms, espero encontrar algunas rarezas en Swing. Pero, ¿cómo se hace exactamente un espacio transparente de un tamaño particular, entre dos botones en un panel? ¿Tengo que jugar con los diseños y evitar el JSeparator?

Actualización: Debe ser trivial hacerlo con un diseño y sin ningún objeto de separación. Asique como haces eso? Estoy mirando el personalizador de diseño de NetBeans y el inspector de propiedades y no encuentro forma de hacerlo. (Respuesta: Layouts con Insets, en lugar de separadores.)

+0

Es "(sin frontera)" nulo o un objeto que representa un borde vacío? 'null' es el borde predeterminado de UI –

+0

Por cierto, si alguna vez realmente quisiste hacer esto, necesitarías anular el código de aspecto y tacto de JSeparator para no pintar nada. Las líneas no son el borde. – justkt

+1

JSeperator se inventó para crear separadores visibles. No desea un separador; desea una separación *, que se puede lograr mediante uno de los muchos métodos a continuación. –

Respuesta

18

Debería echar un vistazo a los métodos de utilidad estáticos en la clase Box. Se pueden usar para fabricar puntales fijos que actúan como separadores invisibles; p.ej.

JPanel pnl = new JPanel(new FlowLayout()); 
pnl.add(new JButton("Hello")); 
pnl.add(Box.createHorizontalStrut(10)); // Fixed width invisible separator. 
pnl.add(new JButton("Goodbye"); 

Esto produce más código compacto de crear/configurar un JPanel usted mismo con mínimo apropiado, máximo y dimensiones preferidas.

+0

Creo que este código y JPanel podrían ser más dolorosos a largo plazo, como práctica estándar, que el uso apropiado de los diseños. –

+2

@Warren P : Dependiendo del administrador de diseño que use, este código podría * ser * un uso apropiado de los diseños. Los diferentes administradores de diseño tienen formas muy diferentes de lograr el mismo resultado. –

+0

"Uso apropiado de diseños" en mi caso, significa "usar netbeans" administrador de diseño en lugar de generar mi propio código, mientras sigo aprendiendo netbeans, swing y revisando mi conocimiento del idioma rancio de java ". ;-) –

4

JSeparator está destinado a ser un separador visible entre los componentes.

Desde el javadoc for JSeparator:

JSeparator proporciona un componente de propósito general para la implementación de las líneas divisorias - más comúnmente utilizado como un divisor entre los elementos de menú que les divide en grupos lógicos.

Si desea colocar un componente entre dos componentes que es invisible, simplemente use un JPanel. Luego configure el tamaño del panel con setPreferedSize() y setMin/MaxSize().

+0

En la mayoría de los entornos que no sean java, se habría considerado la opción de hacer que esa línea desaparezca. Es extraño que no haya sido considerado por estos tipos. –

+1

Por el contrario, los elementos vacíos 'Box' y' Insets' se crean para ese fin. Se consideró, simplemente no usar 'JSeparator' – justkt

+0

Ah sí. Los Insets son perfectos para mis usos, y box y createHorizontalStrut serían suficientes para cualquier otra aplicación. Ahora estoy iluminado. Gracias. –

2

No necesita JSeparator. La mayoría de los diseños le permiten establecer la brecha (espacio) entre los componentes. Y la clase Box puede ser particularmente útil.

+0

¿Cómo puedo tener un diseño de caja con dos botones con al menos 10 píxeles entre cada botón? Parece que no puedo entender eso. –

+1

'Caja.createHorizontalStrut (10) 'entre los botones, en un' FlowLayout'. – justkt

+0

Cool. El otro chico mencionó eso, en código, pero yo estaba tratando de hacer esto desde el IDE (netbeans). Resulta que puede hacer esto visualmente en el administrador de diseño ajustando "inserciones". –

1

Usando addSeparator con un valor de 1 para la altura hace que sea invisible para mí, por ejemplo:

MyJToolBar.addSeparator(new Dimension(20, 1)); 
Cuestiones relacionadas