2009-11-13 37 views
13

Tengo un JScrollPane con FlowLayout que quiero que tenga un ancho fijo. Debería desplazarse verticalmente solo, y los contenidos deberían reorganizarse automáticamente cuando cambie el tamaño de la ventana. Creo que debería haber un método como setEnableHorizontalScroll(false) pero no puedo encontrarlo.deshabilitar desplazamiento horizontal en jscrollpane

¿Hay alguna manera fácil de hacerlo?

Respuesta

7

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); 
    } 
} 

Adaptado de Sun's tutorial

19

que 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 que el contenido se reordene automáticamente dependerá de qué contenido sea. Un JTextPane o JEditorPane hará esto automáticamente (sin la necesidad del código anterior).

+0

Los contenidos son 'JPanel's de tamaño fijo, y no son auto reorganizado. La barra de desplazamiento simplemente desaparece :( – phunehehe

+0

'JScrollPane.HOTRIZONTAL_SCROLLBAR_NEVER' es la variable que tiene que pasar si desea omitir esa importación. La solución de Matthew funciona para mí, gracias. – LouwHopley

+0

Otros componentes deben implementar Scrollable y dejar getScrollableTracksViewportWidth() return false como se menciona a continuación. –

6

Esta no es una solución personalizada lista para usar en el JDK.

Puede usar el WrapLayout.

O puede crear un panel personalizado e implementar la interfaz Desplazable. La clave en este caso está anulando getScrollableTracksViewportWidth() para que sea verdadero, por lo que el ancho de las ventanas y no el ancho del panel se usa para fines de diseño. Un ejemplo de este enfoque se puede encontrar en el ScrollableFlowPanel

+0

No me gusta la idea de usar una biblioteca de terceros. Java debería tener eso por defecto, creo. Pero gracias por compartir, hace lo que necesito :) – phunehehe

-1

me encontré este problema también ... mi solución fue modificar el JScrollPane source code y pasar un parámetro adicional para deshabilitar 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. Minifique el código fuente modificado e inclúyalo 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.

+3

El OP preguntaba por el Swing Componente JScrollPane en Java, no el plugin jScrollPane para jquery. – Dathan

+0

@Dathan LOL: D: D Este usuario estaba borracho – khandelwaldeval

-1

Simplemente configure la pantalla como "ninguna" usando 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 de incluir a los padres elemento.

+3

La pregunta es acerca de los componentes de Java Swing. – xmedeko

-1

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

+1

La pregunta es acerca de los componentes de Java Swing. –

1

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

1. descarga "SwingX 1.6.4 Todo - binario", y añadir el frasco para las bibliotecas de su proyecto here.

2. conjunto JXPanel como el de ViewportView JScrollPane su vez de un JPanel:

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

3. agregue las dos siguientes declaraciones:

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

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

Cuestiones relacionadas