Pregunta

Mi problema actual es que tengo un JFrame con un GridLayout de 2x2. Y dentro de uno de los cuadrados, tengo un JPanel que es para mostrar una cuadrícula. Estoy teniendo un día de campo con la biblioteca Java Swing ... echa un vistazo

Imagen

Java expande automáticamente cada JLabel para que se ajuste a la pantalla. Quiero que solo sean esos cuadrados azules (agua) y el borde negro y no ese espacio gris. ¿Hay alguna manera de establecer el tamaño de ese JPanel de forma permanente para que no tenga que cambiar el tamaño del JFrame un millón de veces antes de obtener la dimensión exacta para que desaparezca el espacio gris?

También me gustaría establecer el tamaño de esos botones para que no sean tan grandes ( BorderLayout se está utilizando para los botones y TextField)

¿Fue útil?

Solución

Si desea que los dos tableros de ajedrez permanezcan del mismo tamaño, entonces deberá tener cada uno contenido en su propio JPanel . Configure cada uno de esos JPanel primarios para que tengan un tipo de diseño de GridBagLayout . Establezca el tamaño preferido para cada componente de tablero de ajedrez y luego agréguelos a sus respectivos contenedores. GridBagLayout debería, por defecto, colocar cada placa en el centro del JPanel padre. Por lo tanto, a medida que se cambia el tamaño de la ventana, el área padre JPanel se hará más grande o más pequeña, pero los componentes del tablero de ajedrez en el interior permanecerán del mismo tamaño.

Alternativamente, puede hacer que sus cuadrados azules se escalen al tamaño correcto a medida que se redimensiona la ventana haciendo que cada cuadrado del tablero de verificación sea un JPanel con un administrador de diseño BorderLayout y agregue JLabel (con un color de fondo azul) en su ubicación BorderLayout.CENTER .

En cuanto a sus botones, intente algo como esto:

JPanel theButtonPanel = new JPanel(new BorderLayout());
JButton button1 = new JButton("Fire");
JButton button2 = new JButton("Pass");
JButton button3 = new JButton("Forfiet");

JPanel innerButtonContainer = new JPanel(new Grid(1, 3, 8, 8));
innerButtonContainer.add(button1);
innerButtonContainer.add(button2);
innerButtonContainer.add(button3);

theButtonPanel.add(innterButtonContainer);

Por último, considere usar una herramienta de diseño para su interfaz de usuario Swing. Netbeans tiene incorporado un excelente UI diseñador. Descargue Netbeans aquí .

Otros consejos

GridBagLayout es lo que realmente quiere usar. GridLayout forzará el mismo tamaño para cada componente en el diseño, sin importar las restricciones de tamaño que usted les ponga. GridBagLayout es mucho más poderoso y mucho más complicado. Estudie en la página API para ello. Usando GridBagLayout , los componentes no llenarán todo el espacio de la cuadrícula si no lo desea e incluso pueden mantener el tamaño que usted le pida. Para evitar que cambie el tamaño de un componente, establecería las tres restricciones de tamaño disponibles:

water.setPreferredSize(new Dimension(20, 20));
water.setMinimumSize(new Dimension(20, 20));
water.setMaximumSize(new Dimension(20, 20));

Para sus botones, definitivamente usaría un panel interno como Bryan menciona. Puede usar un GridLayout como él sugiere o un FlowLayout si no desea que todos los botones tengan el mismo tamaño. Agregue todos sus botones a ese panel interno en lugar del principal.

Si puede setResizeable (false) en el marco de nivel superior, puede configurar su administrador de diseño para codificar nulo y duro cada ubicación y tamaño a través de setBounds. Así es como lo haría (dependiendo del cambio de tamaño, por supuesto).

He tenido éxito resolviendo problemas como estos usando TableLayout , que es un administrador de diseño de terceros. Deberá descargarlo y leer el tutorial, pero la clave sería establecer la justificación en CENTRO al agregar los JButtons a sus posiciones en el diseño.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top