Cómo hacer un JPanel desplazable? He implementado el desplazable de la interfaz sin embargo, cuando se añade a la que contiene el panel con

tabbedPane.add("Editor", new JScrollPane(storeyEditor = new MNScrollablePanel()));

nada funciona

Código:

public class MNScrollablePanel extends JPanel implements Scrollable {

    public Dimension getPreferredScrollableViewportSize() {
        return getPreferredSize();
    }

    public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
        return 10;
    }

    public boolean getScrollableTracksViewportHeight() {
        return false;
    }

    public boolean getScrollableTracksViewportWidth() {
        return false;
    }

    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
        return 10;
    }
}

OriginalEl autor thoaionline | 2009-09-06

5 Comentarios

  1. 8

    Usted tiene que utilizar un JScrollPane. Y, a continuación, llamar a la setViewportview(Component);

    Usted no tiene que implementar desplazable, JPanel es ya desplazable

    Usted puede agregar cualquier componente de un JScrollPane, si se implementa Desplazable o no, pero la implementación de desplazamiento que le dará más control. JPanel no implementar Desplazables, así que usted tiene a la sub-clase si desea más control sobre la forma del panel de desplazamiento se comporta cuando se muestre el panel.
    (O puede establecer las propiedades de la JScrollPane/JScrollBars sin la aplicación de cualquier cosa.)
    Sí, pero nunca me dijo ‘implementa’
    Nunca lo dijo, pero resulta muy engañosa.
    diciendo JPanel is allready scrollable, implícitamente significa que implementa el Desplazable de la interfaz, lo cual no es cierto.

    OriginalEl autor Martijn Courteaux

  2. 22

    Que trabajó conmigo como este….

    JPanel test = new JPanel();
    test.setPreferredSize(new Dimension( 2000,2000));
    JScrollPane scrollFrame = new JScrollPane(test);
    test.setAutoscrolls(true);
    scrollFrame.setPreferredSize(new Dimension( 800,300));
    this.add(scrollFrame);
    Tenga en cuenta que usted no tiene control sobre el desplazamiento de incremento, es decir, cada clic en el botón de desplazamiento o de cada rueda del ratón vez se traduce en un desplazamiento de un píxel que usted necesita para vencer – en caso de que usted desee, mediante la implementación de Scrollable.

    OriginalEl autor Name

  3. 1

    Como se mencionó en el resto de la publicación, no hay razón para implementar el Desplazable de la interfaz de sí mismo. Sin embargo, si usted está jugando, a continuación, el código básico publicado parece razonable. Sin embargo, usted no publicar su programa de demostración que muestra cómo se utiliza este código. En el futuro, publicar un SSCCE con su pregunta. Si usted no sabe lo que es un SSCCE es, a continuación, buscar en la web.

    Una vez que el posible problema es que las barras de desplazamiento aparecen automáticamente cuando el “tamaño” de la componente añadido a la ventanilla del componente scrollpane es mayor que el tamaño del componente scrollpane.

    Así que si usted está haciendo pintura personalizada en el panel, que son los responsables de establecer el tamaño preferido del panel de cambios. Si usted está usando un panel con los componentes y un gestor de diseño entonces usted no tiene que preocuparse acerca de esto. Pero si usted está usando componentes con un valor null gestor de diseño que también tienen problemas.

    Es por eso que necesitamos un SSCCE porque no sabemos el contexto de cómo se está usando el panel.

    OriginalEl autor camickr

  4. 1

    JPanel no implementa Desplazable. Es mejor utilizar JXPanel de SwingX, que implementa Desplazable y tiene características mucho más.

    OriginalEl autor Thinesh Ganeshalingam

  5. 0

    Tengo una nueva solución para usted.

    Creo que tienes que usar este código:

    storyEditor = new JPanel();
    storyEditor.setPreferredSize(new Dimension(..., ...)); //Insert Here your size for the editor
    JScrollPane scroller = new JScrollPane(storyEditor);
    tabbedPane.add("Editor", scroller));
    frame.setSize(frame.getWidth()+1, frame.getHeight()); //frame is the JFrame where the tabbed pane is into
    //Maybe you can replace "frame" with "this"
    //You need to resize your frame. Why, I don't know...
    frame.pack();
    //Your original size will be restored by calling pack

    Esta fue una solución para mí. Espero que para ustedes!

    OriginalEl autor Martijn Courteaux

Dejar respuesta

Please enter your comment!
Please enter your name here