Hola estoy usando un BoxLayout
apilar JPanel
s en la parte superior de uno al otro (BoxLayout.Y_AXIS
), por ejemplo, si mi padre JPanel
es de altura de 500 píxeles y añado dos paneles secundarios a que ambos altura 100 píxeles. El BoxLayout
los estira para que juntos ocupen el espacio de 500px. ¿Alguien sabe cómo desactivar esta característica?BoxLayout extiende componente adecuado para el panel de padres
Respuesta
Use GridBagLayout en su lugar. Usted tiene mucho más control sobre su UI.
Pero si desea utilizar BoxLayout todavía, y no desea que se estire, puede consultar usando invisible component fillers como áreas rígidas, pegamento y rellenos.
Si me bajas, por favor proporciona un motivo – Ascalonian
Asegúrate de revisar la sección "Pegado horizontal" en el enlace publicado. Muy útil. – FuriousFolder
Sus paneles se estiran porque BoxLayout no limita cada panel a su tamaño preferido. Debe encontrar diseños que respeten el tamaño preferido de un componente, como lo hacen las posiciones NORTH y SOUTH de BorderLayout.
Prueba esto:
- Crear un JPanel con un BorderLayout. Agregue su componente secundario como NORTE en este JPanel.
- Cree un segundo JPanel para el otro componente secundario, agréguelo como NORTE de un BorderLayout
- Agregue los dos JPanels a su BoxLayout.
Código:
JPanel panel1 = new JPanel(new BorderLayout());
panel1.add(component1, BorderLayout.NORTH);
JPanel panel2 = new JPanel(new BorderLayout());
panel2.add(component2, BorderLayout.NORTH);
JPanel boxPanel = new JPanel();
BoxLayout boxLayout = new BoxLayout(boxPanel, BoxLayout.Y_AXIS);
boxPanel.setLayout(boxLayout);
boxPanel.add(panel1);
boxPanel.add(panel2);
Me gusta esta solución porque evita jugar con la grilla y modificar los componentes, lo que es una gran ventaja. –
El truco es, como la respuesta anterior mencionado, para usar el pegamento, materiales de relleno, y las zonas rígidas en el diseño de la caja. Sin embargo, a diferencia de ese respondedor, recomendaría seguir con BoxLayout: puede lograr la mayoría de las UI simples con Box más que con Grid Bag; y el poder extra no te compra mucho en tu cuadro de diálogo típico.
En el antiguo idioma, estas eran cosas como Box.createHorizontalStrut (int x) y Box.createHorizontalGlue(); la idea es colocar un puntal entre su primer y segundo componente y luego agregar un pegamento después del segundo. ("puntal" = "área rígida" hoy en día).
Estoy de acuerdo con eso para fines generales de apilamiento, el GridBagLayout puede ser excesivo. Solo sugiriéndolo si él avanza. – Ascalonian
He tratado de poner un área rígida entre los dos paneles secundarios y el adhesivo vertical después de la segunda, puse los paneles todavía se estiran: s – Aly
No existe una sobrecarga :) – willcodejavaforfood
BoxLayout es uno de los pocos administradores de diseño que respeta los tamaños mínimo y máximo de un componente. Así que si desea evitar que un panel de estiramiento que puede utilizar:
panel.setMaximumSize(panel.getPreferredSize());
Esto puede haber sido hace un tiempo, pero ¿es eso usando un método obviado GetPreferredSize()? – MikeM
@MikeM, no, ya que el panel confía en el administrador de diseño para devolver el tamaño preferido. En realidad, una mejor solución es extender el JPanel y anular el método 'getMaximumSize()' para simplemente devolver el valor del método 'getPreferredSize()'. De esta forma, el tamaño máximo se calculará dinámicamente en caso de que el tamaño preferido cambie dinámicamente. – camickr
Interesante, gracias. – MikeM
Esto parece funcionar perfectamente bien ... usando BoxLayout, como lo hubiera querido.
this.setLayout(new FlowLayout()); // this being the JFrame
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.setPreferredSize(new Dimension(500, 500));
panel.setBackground(Color.orange);
this.add(panel); // add the parent to the JFrame
JPanel pnlChild1 = new JPanel();
pnlChild1.setBackground(Color.cyan);
pnlChild1.setMaximumSize(new Dimension(200, 100));
JPanel pnlChild2 = new JPanel();
pnlChild2.setBackground(Color.magenta);
pnlChild2.setMaximumSize(new Dimension(200, 100));
panel.add(pnlChild1);
panel.add(pnlChild2);
- 1. java BoxLayout panel de
- 2. ¿Hay un componente estándar para el panel plegable en Qt?
- 3. Colocación del componente en el panel de vidrio
- 4. oscilación BoxLayout problema JComboBox sin utilizar setXXXSize
- 5. Vuelva a pintar en el marco/panel/componente translúcido.
- 6. Delphi componente del panel de control de Windows 7
- 7. BoxLayout no se puede compartir error
- 8. ¿Cuál es el mapeo de la APP adecuado para @Id en los padres y secuencial único de clases base
- 9. Ayúdeme a comprender los problemas de alineación de BoxLayout
- 10. "No se encontró ningún componente de imágenes adecuado para completar esta operación".
- 11. Causa de No se encontró el controlador adecuado para
- 12. Java extiende el ejemplo
- 13. clave Adecuado para NSDictionary
- 14. el momento adecuado para usar CoffeeScript
- 15. Procedimiento adecuado para usar el enrutamiento sproutcore
- 16. conseguir el compilador adecuado para C++
- 17. ningún método adecuado para el error tipo
- 18. ¿Cómo centrar elementos en BoxLayout usando el centro del elemento?
- 19. ¿MapReduce es adecuado para mí?
- 20. Marco GUI adecuado para Scala?
- 21. regla de Java para extiende e implementa
- 22. Underscore js extiende el método
- 23. Backbone.js adecuado para dispositivos móviles?
- 24. ¿Obtener el nombre de la clase para padres?
- 25. Omitir la ejecución de <ui:include> cuando el componente de interfaz de usuario de los padres no se representa
- 26. ¿Cuál es el mejor componente Wicket para renderizar HTML arbitrario?
- 27. ¿Cómo hacer "algo" en el cambio de tamaño del componente Swing?
- 28. ¿Cómo configurar Xcode para el formato adecuado de javascript?
- 29. ¿Cuál es el método adecuado para imprimir excepciones de Python?
- 30. procedimiento adecuado para helpers de etiquetas en el bigote
¿Cómo estás sepcifying el tamaño de los paneles hijos? – Ascalonian
Con panel.setPrefferedSize y panel.setMinimumSize ambos usando la misma Dimensión – Aly