Pregunta

Tengo un JScrollPane con FlowLayout que desea tener un ancho fijo. Cabe desplaza verticalmente solamente, y el contenido debe ser reorganizado de forma automática cuando cambio el tamaño de la ventana. Creo que debe ser un método como setEnableHorizontalScroll(false) pero no lo encuentra.

¿Hay alguna forma fácil de hacer esto?

¿Fue útil?

Solución 3

Finalmente descubrí cómo, por favor ver este muy corto ejemplo, no hay trucos avanzados necesarios:

public class MyTest extends JFrame {

    public static void main(String[] args) {
        MyTest test = new MyTest();
        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        test.setSize(300, 200);
        test.setVisible(true);
    }

    public MyTest() {
        String[] data = {
            "Arlo", "Cosmo", "Elmo", "Hugo",
            "Jethro", "Laszlo", "Milo", "Nemo",
            "Otto", "Ringo", "Rocco", "Rollo"
        };
        JList list = new JList(data);
        list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
        list.setVisibleRowCount(0);
        JScrollPane scroll = new JScrollPane(list);
        this.add(scroll);
    }
}

de Sun tutorial

Otros consejos

Puede utilizar:

import static javax.swing.ScrollPaneConstants.*;
// ...
JScrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);

... pero esto sólo previene la barra de desplazamiento horizontal que alguna vez se muestra.

Para obtener el contenido de reorganizar de forma automática dependerá de lo que es el contenido. Un JTextPane o JEditorPane va a hacer esto de forma automática (sin necesidad de que el código anterior).

Esto no es una solución a la medida de la caja en el JDK.

Puede utilizar el WrapLayout .

O puede crear un panel personalizado e implementar la interfaz desplazable. La clave en este caso es reemplazar getScrollableTracksViewportWidth () para volver verdadero, así que las ventanas de visualización de la anchura y no el ancho del panel se utiliza para fines de diseño. Un ejemplo de este enfoque se puede encontrar en el ScrollableFlowPanel

Se puede utilizar en lugar de org.jdesktop.swingx.JXPanel javax.swing.JPanel como el ViewportView de su JScrollPane:

1 descargar "SwingX 1.6.4 Todo - binario"., Y agregar el frasco para las bibliotecas de su proyecto aquí.

2 set JXPanel como el ViewportView de su JScrollPane en lugar de un JPanel:.

JScrollPane scrollPane = new JScrollPane();  
JXPanel panel = new JXPanel();  
scrollPane.setViewportView(panel);

3 añadir siguientes dos declaraciones:.

panel.setScrollableTracksViewportHeight(false);  
panel.setScrollableTracksViewportWidth(true);

4. a continuación, puede añadir elementos a JXPanel como lo hizo a un JPanel

probar esto, esto funciona bien en mí jScrollPane1.setHorizontalScrollBar (null);

Me encontré con este tema, así ... mi solución fue modificar el fuente JScrollPane código y pasar un parámetro adicional para desactivar el desplazamiento horizontal. Las ediciones son muy simples:

En la línea 53:

$.fn.jScrollPane = function (settings, horizontalScrollingEnabled) {

A continuación, en la línea 177:

if (horizontalScrollingEnabled) {
isScrollableH = percentInViewH > 1;
} else {
isScrollableH = false;
}

Eso es todo lo que necesita cambiar. Minimizar el código fuente modificado e incluirla en su página. Al inicializar el JScrollPane, ahora se puede establecer si desea que para desplazarse horizontalmente, así:

$('.scroll-pane').jScrollPane("", false);

Espero que ayude.

Sólo tienes que configurar la pantalla a "ninguno" utilizando la clase CSS para la barra horizontal. En la parte inferior de su jScrollPlane (después de haber inicializado), incorporar en:

$('.jspHorizontalBar').css({ 'display': 'none' });

Si se usa múltiplos de una página, y algunos que necesitan la barra horizontal, siempre se puede modificar la orientación para incluir el elemento padre.

Simplemente elimine isScrollableH = percentInViewH > 1; en jquery.jscrollpane.js

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