setpreferredsize pasos para ejemplos ejemplo crear componentes componente caracteristicas java swing user-interface layout resize

java - pasos - swing containers



Componente Swing-deshabilita el tamaño en el diseño (3)

Tengo una compilación personalizada de GUI, que se basa en JPanel de Swing. Este componente se coloca en un JFrame, que usa BorderLayout. Cuando cambio el tamaño del marco, este componente sigue cambiando de tamaño. ¿Cómo puedo evitar esto? Me gustaría que el componente mantenga el mismo tamaño pase lo que pase. He intentado setSize, setPreferredSize, setMinimumSize sin éxito.

¡Gracias por adelantado!

METRO


//this will restrict size on fix size, what ever size you will define for panel like //panel.setSize(400,400); panel.setMaximumSize(panel.getSize()); panel..setMinimumSize(panel.getSize());


Tienes pocas opciones:

  • Anide el componente en un panel interno con un LayoutManager que no LayoutManager tamaño de su componente

  • Use un LayoutManager más sofisticado que BorderLayout . Me parece que GridBagLayout se adaptaría mejor a tus necesidades aquí.

Ejemplo de la primera solución:

import java.awt.*; import javax.swing.*; public class FrameTestBase extends JFrame { public static void main(String args[]) { FrameTestBase t = new FrameTestBase(); JPanel mainPanel = new JPanel(new BorderLayout()); // Create some component JLabel l = new JLabel("hello world"); l.setOpaque(true); l.setBackground(Color.RED); JPanel extraPanel = new JPanel(new FlowLayout()); l.setPreferredSize(new Dimension(100, 100)); extraPanel.setBackground(Color.GREEN); // Instead of adding l to the mainPanel (BorderLayout), // add it to the extra panel extraPanel.add(l); // Now add the extra panel instead of l mainPanel.add(extraPanel, BorderLayout.CENTER); t.setContentPane(mainPanel); t.setDefaultCloseOperation(EXIT_ON_CLOSE); t.setSize(400, 200); t.setVisible(true); } }

Resultado:

El componente verde se coloca en BorderLayout.CENTER , el componente rojo mantiene el tamaño preferido.


si está usando el administrador de diseño personalizado, cambie su diseño actual a GridBagLayout y cambie las opciones de relleno a NINGUNO , luego de eso, vuelva a cambiarlo a su primer diseño.