resizing redimensionar java swing size jframe jpanel

resizing - redimensionar jframe java



Tamaño de JPanel automáticamente dentro de JFrame (5)

Tengo una subclase de JPanel en la que agrego buutons, etiquetas, tablas, etc. Para mostrar en pantalla, uso 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 dimensiono la ventana, el tamaño del panel no cambia. ¿Cómo hacer que el tamaño del panel sea el mismo que el tamaño de la ventana incluso si se redimensionó?


Debe configurar un administrador de diseño para que el JFrame lo utilice: se trata de cómo se posicionan los componentes. Una útil es el administrador BorderLayout.

Simplemente agregue la siguiente línea de código para solucionar sus problemas:

mainFrame.setLayout(new BorderLayout());

(Haga esto antes de agregar componentes al JFrame)


Puede configurar un administrador de diseño como BorderLayout y luego definir de manera más específica, dónde debe ir su panel:

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 el área central del marco y lo deja crecer automáticamente al cambiar el tamaño del marco.


Si la opción BorderLayout proporcionada por nuestros amigos no funciona, intente agregar ComponentListerner al JFrame e implemente el método componentResized (event). Cuando se cambie el tamaño del objeto JFrame, se llamará a este método. Entonces, si escribe el código para establecer el tamaño del JPanel en este método, obtendrá el resultado deseado.

Ya, sé que esta ''solución'' no es buena, pero úsala como una red de seguridad. ;)


Como han dicho otros carteles, debe cambiar el LayoutManager que se está utilizando. Siempre preferí usar un GridLayout para que tu código se convirtiera en:

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

GridLayout me parece más correcto desde el punto de vista conceptual cuando desea que su panel ocupe toda la pantalla.


Desde mi experiencia, utilicé GridLayout.

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

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


Por ejemplo, si quiero crear un panel con:

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

El código está abajo:

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

Este método es útil cuando desea agregar JScrollPane a su JPanel. El tamaño del JPanel dentro de JScrollPane cambiará automáticamente cuando agregue algunos componentes, por lo que JScrollPane reiniciará automáticamente la barra de desplazamiento.