/ / ¿Cómo hago para que este FlowLayout se ajuste dentro de su JSplitPane? - Java, swing, gerente de diseño

¿Cómo hago esta envoltura de FlowLayout dentro de su JSplitPane? - Java, swing, gestor de diseño.

Escribí este ejemplo de código para ilustrar un problema que tengo con mi programa.

Espero poder deslizar la barra deslizante de JSplitPane hacia la izquierda, más allá del borde de los botones, comprimiendo ese JPanel, y hacer que FlowLayout ajuste los botones a una segunda fila.

En cambio, el JSplitPane no me permite movermeel control deslizante pasa el botón más a la derecha de la pantalla, y si cambio el tamaño de todo el JFrame para forzar la compresión, los botones (supongo) simplemente se están ejecutando en el lado derecho del JPanel, debajo de la barra deslizante (supongo, porque obviamente No puedo verlos).

¿Qué estoy haciendo mal?

import java.awt.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
public class Driver implements Runnable {
public static void main(String[] args) {
(new Driver()).run();
}
public void run() {
try {
go();
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
private void go() throws Exception {
JFrame jframe = new JFrame("FlowLayoutTest");
JPanel left = new JPanel();
left.setBackground(Color.RED);
left.setLayout(new BorderLayout());
JPanel right = new JPanel();
right.setBackground(Color.BLUE);
right.setLayout(new BorderLayout());
JSplitPane topmost =
new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, right);
jframe.setContentPane(topmost);
JPanel bottomleft = new JPanel();
bottomleft.setBackground(Color.GREEN);
bottomleft.setLayout(new FlowLayout());
left.add(bottomleft, BorderLayout.PAGE_END);
for (int i = 0; i < 10; i++) {
bottomleft.add(new JButton("" + i));
}
jframe.pack();
jframe.setVisible(true);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Respuestas

6 para la respuesta № 1

¿Hay otro administrador de diseño además de FlowLayout que haga lo que estoy buscando?

Envolver diseño Deberia trabajar.


1 para la respuesta № 2

Si agregas esto

bottomleft.setMinimumSize(new Dimension(0, 0));

antes del paquete (), entonces se reabastecerá. PERO, no volverá a empaquetar el diseño del borde, por lo que en lugar de dos líneas obtendrá una con el resto cortado. Entonces, después de un cambio de tamaño, tendrá que volver a empaquetar el diseño del borde. Si omite el diseño del borde, volverá a fluir como desee.

Dicho esto, debes evitar FlowLayout como la peste. La mayoría de los diseños que vienen con Swing son pobres, pero FlowLayout es uno de los peores infractores.