Pregunta

Tengo una subclase de JPanel en la que agrego buutons, etiquetas, tablas, etc. Para mostrar en pantalla que utilizo JFrame:

MainPanel mainPanel = new MainPanel(); //JPanel subclass

JFrame mainFrame = new JFrame();
mainFrame.setTitle("main window title");
mainFrame.getContentPane().add(mainPanel);
mainFrame.setLocation(100, 100);
mainFrame.pack();
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Pero cuando dimensionar la ventana, el tamaño del panel de no cambio. Cómo hacer que el tamaño del panel para ser el mismo que el tamaño de la ventana incluso si se cambia el tamaño?

¿Fue útil?

Solución

Puede configurar un controlador de disposición como BorderLayout y luego definir más específicamente, en su panel debe ir:

MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new BorderLayout());
mainFrame.add(mainPanel, BorderLayout.CENTER);
mainFrame.pack();
mainFrame.setVisible(true);

Esto coloca el panel en la zona centro de la imagen y la deja crecer de forma automática al cambiar el tamaño del marco.

Otros consejos

Es necesario configurar un controlador de disposición para el JFrame de usar - Esto se refiere a cómo se colocan los componentes. A una útil es el gestor de BorderLayout.

Simplemente añadiendo la siguiente línea de código debería solucionar sus problemas:

mainFrame.setLayout(new BorderLayout());

(Haga esto antes de añadir componentes a la JFrame)

Si la opción BorderLayout proporcionada por nuestros amigos doesnot trabajo, trate de añadir a la ComponentListerner JFrame y poner en práctica el método componentResized (evento). Cuando se cambia el tamaño del objeto JFrame, se llama a este método. Así que si se escribe el código para establecer el tamaño de la JPanel en este método, va a lograr el resultado deseado.

Ya, ya sé esta 'solución' no es bueno sino que lo utiliza como red de seguridad. ;)

A partir de mi experiencia, he utilizado GridLayout.

    thePanel.setLayout(new GridLayout(a,b,c,d));

a = número de fila, b = número de columna, c = brecha horizontal, d = brecha vertical.


Por ejemplo, si quiero crear panel con:

  • fila ilimitada (conjunto a = 0)
  • 1 columna (conjunto b = 1)
  • espacio vertical = 3 (conjunto d = 3)

El código es a continuación:

    thePanel.setLayout(new GridLayout(0,1,0,3));

Este método es útil cuando se desea añadir a sus JScrollPane JPanel. Tamaño de las JPanel dentro JScrollPane se cambia automáticamente al agregar algunos componentes en él, por lo que el JScrollPane se restablecerá automáticamente la barra de desplazamiento.

Como otros han dicho, es necesario cambiar el LayoutManager siendo utilizado. Siempre he preferido el uso de un GridLayout lo que el código se convertiría en:

MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new GridLayout());
mainFrame.pack();
mainFrame.setVisible(true);

GridLayout parece más conceptualmente correcto para mí cuando usted quiere que su panel para ocupar toda la pantalla.

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