redimensionar - tamaño de un panel java
¿Puedes establecer un tamaño permanente para un JPanel dentro de un JFrame? (4)
He tenido éxito resolviendo problemas como estos utilizando TableLayout
que es un administrador de diseño de terceros. Tendrá que descargarlo y leer el tutorial, pero la clave sería establecer la justificación en CENTER al agregar los JButtons a sus posiciones en el diseño.
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 grilla. Estoy teniendo un día de campo con la biblioteca de swing de java ... eche un vistazo
Java está expandiendo automáticamente cada JLabel para ajustarse 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 permanentemente 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 el espacio gris desaparezca?
También me gustaría establecer el tamaño de esos botones para que no sean tan grandes (se usa BorderLayout
para los botones y TextField)
Si desea que los dos cuadros de ajedrez permanezcan del mismo tamaño, deberá tenerlos contenidos en su propio JPanel
. Establezca que cada uno de esos padres JPanel tenga 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 debe colocar de forma predeterminada cada placa en el centro del JPanel padre. Por lo tanto, a medida que se redimensiona la ventana, el área principal de JPanel se hará más grande o más pequeña, pero los componentes del tablero de ajedrez dentro permanecerán del mismo tamaño.
Alternativamente, puede hacer que sus cuadrados azules se escalen al tamaño correcto a medida que la ventana se redimensiona haciendo que cada cuadrado de tablero sea un JPanel
con un BorderLayout
diseño BorderLayout
y agregue el JLabel
(con un color de fondo azul) a 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 un excelente diseñador de interfaz de usuario incorporado. Descargue Netbeans aquí .
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 (depende del cambio de tamaño, por supuesto).
GridBagLayout es lo que realmente quieres usar. El GridLayout forzará el mismo tamaño para cada componente en el diseño sin importar las restricciones de tamaño que le pongas. GridBagLayout es mucho más poderoso y mucho más complicado. Estudie en la página de la API para ello. Al usar GridBagLayout
, los componentes no llenarán todo el espacio de la cuadrícula si no los deseas y pueden incluso mantener el tamaño que le pides. Para evitar que el tamaño de un componente cambie, 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 menciona Bryan . Puede usar un GridLayout como 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.