Pregunta

¿Cuándo es el tamaño preferido de un conjunto JPanel si no lo configura explícitamente?

Tengo el siguiente código:

private static class ScrollableJPanel extends JPanel implements Scrollable {
    @Override
    public Dimension getPreferredScrollableViewportSize() {
                 return getPreferredSize();
    }
            .
            .
            .
}

y este código:

    myPanel = new ScrollableJPanel();
            // Add a bunch of controls to the panel.
    final JScrollPane scroll = new JScrollPane(myPanel);
    scroll.setAutoscrolls(true);
    scroll.setHorizontalScrollBarPolicy(
        ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

Sin embargo, el tamaño preferido de MyPanel en el momento en que se llama GetPreferRedsCrollableViewPortSize () parece ser un valor arbitrario (4225, 34) y prefsizeset = false.

De acuerdo con la Documentación de Java, esta es una forma razonable de definir este método. Sin embargo, el tamaño real de mypanel es mucho más alto que 34 píxeles, por lo que el puerto de vista es demasiado pequeño.

¿Qué estoy haciendo mal aquí? ¿Debo establecer el tamaño preferido de MyPanel explícitamente? Lo intenté, pero quiero usar el tamaño real determinado por el administrador de diseño, no solo adivinar que se anulará más adelante.

Tenga en cuenta que mi pregunta no es cómo establecer un tamaño exacto para el jpanel. Quiero que el gerente de diseño haga eso. Tampoco quiero tener que establecer explícitamente el tamaño preferido. Pensé que también fue manejado por el gerente de diseño. Lo que quiero saber es por qué el administrador de diseño no está configurando un valor razonable para el tamaño preferido en sí para que pueda devolver un preferido razonable.

¿Fue útil?

Solución

El tamaño preferido de un jpanel se basa en los componentes del panel. El Administrador de diseño calcula un tamaño preferido del panel, según el tamaño preferido de los elementos en el panel, y si algunas de esas cosas son paneles, entonces es un cálculo recursivo. Si no hay subs componentes en el panel, el tamaño preferido deberá establecerse explícitamente.

Otros consejos

En awt (y luego swing), Container.getPreferredSize() o:

  • Devuelve el tamaño explícitamente establecido por setPreferredSize(),
  • o el tamaño calculado por el LayoutManager si setPreferredSize() no se ha llamado explícitamente

Por lo tanto, que getPreferredSize() las devoluciones depende en gran medida de qué LayoutManager Usted usa para su ScrollableJPanel.

Sea consciente de que la mayoría LayoutManagerS usará getPreferredSize() en todos los niños directos del Container sobre el cual getPreferredSize() fue llamado. Este es un proceso recursivo (si los niños tienen hijos mismos) y pueden involucrar a varios diferentes LayoutManagers.

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