Pregunta

Estoy tratando de evitar que el GridLayout en un JPanel se llene por completo las células e ignorando cualquier setSize de los componentes

Estoy utilizando este código:

import javax.swing.*;
import java.awt.*;

public class GrideComponents{
  public static void main(String[] args) {
    JFrame frame = new JFrame("Laying Out Components in a Grid");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel(new GridLayout(5,2,0,0));
    panel.add(new JLabel("Enter name"));
    JTextField a = new JTextField(5);
    a.setSize(10, 10);
    panel.add(a);
    panel.add(new JLabel("Enter Roll"));
    panel.add(new JTextField(3));
    panel.add(new JLabel("Enter Class"));
    panel.add(new JTextField(3));
    panel.add(new JLabel("Enter Total Marks"));
    panel.add(new JTextField(3));
    panel.add(new JButton("Ok"));
    panel.add(new JButton("Cancel"));
    frame.add(panel);
    frame.setSize(400,400);
    frame.setVisible(true);
  }
}

Y cada componente está llenando la célula gris en vez de estar en el tamaño especificado.

Gracias

¿Fue útil?

Solución

Leer el tutorial Swing en Usar diseño Administradores para que entender los conceptos básicos de cómo funcionan los controladores de distribución.

A GridLayout cambia el tamaño de todos los componentes al mismo tamaño.

Al crear un formulario que generalmente anidan diferentes paneles que utilizan diferentes controladores de distribución para obtener el efecto deseado.

En este caso se podría utilizar un FlowLayout para los botones. Entonces es posible utilizar un GridBagLayout o SpringLayout para los otros componentes.

Otros consejos

¿Usted ha intentado establecer setMaximumSize y setPreferredSize?

En cualquier caso, le recomiendo que pruebe MiGLayout para todas sus necesidades de diseño. Usted se sorprenderá por su sencillez!

El punto de GridLayout es a la disposición de los componentes en una cuadrícula regular. setSize sus llamadas serán anulados por el controlador de distribución. Posiblemente setPreferredSize o setMaximumSize pueden trabajar, pero es hasta el controlador de distribución para decidir que las tenga en cuenta.

BoxLayout es una alternativa útil en este contexto, como se ve en esta ejemplo .

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