JSrcrollPane

Buen día, tengo un problema con las barras de desplazamiento de JScrollPane, por lo que tengo entendido aparecen por default, o se especifica en el constructor o con el método .setVerticalScrollBarPolicy() o .setHORIZONTALScrollBarPolicy. lo eh hecho de ambas formas pero no aparece barra de desplazamiento alguna. El problema es que tengo una clase "Dibujo" que hereda de JComponent la cual incluyo en el JScrollPane con el método .setViewportView(new Dibujo()).
Espero mi explicación sea lo mas entendible posible... Muchas gracias.

.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Re: barras de desplazamiento

 

Por defecto, las barras de desplazamiento sólo se muestran cuando es necesario. Es decir, la política es ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED y ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED.

Si contenedor puede mostrar el componente completo, entonces las barras de desplazamiento no se muestran. Ejemplo:

JFrame frame = new JFrame("Message");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(200, 200);
ImageIcon icon = new ImageIcon(new URL("http://www.javamexico.org/files/zen_logo.png"));
JLabel label = new JLabel(icon);
JScrollPane scrollPane = new JScrollPane(label);
frame.add(scrollPane);
frame.setVisible(true);

img

Pero si el tamaño del contenedor es más pequeño que el del componente, entonces las barras de desplazamiento sí se muestran, según se requieran. Ejemplo:

JFrame frame = new JFrame("Message");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(100, 100);
ImageIcon icon = new ImageIcon(new URL("http://www.javamexico.org/files/zen_logo.png"));
JLabel label = new JLabel(icon);
JScrollPane scrollPane = new JScrollPane(label);
frame.add(scrollPane);
frame.setVisible(true);

img

Si lo que quieres es siempre mostrar las barras de desplazamiento, necesitas cambiar la política, es decir, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS y ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS. Ejemplo:

JFrame frame = new JFrame("Message");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(200, 200);
ImageIcon icon = new ImageIcon(new URL("http://www.javamexico.org/files/zen_logo.png"));
JLabel label = new JLabel(icon);
JScrollPane scrollPane = new JScrollPane(label);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
frame.add(scrollPane);
frame.setVisible(true);

img

Por último, en lugar de utilizar los setters, se puede especificar la política en el constructor. Ejemplo:

JScrollPane scrollPane = new JScrollPane(label,
        ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
        ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

¡Por si sirve de algo!

~~~