Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: mzamora60 en 07 de Enero 2016, 17:14

Título: Java ejemplo uso de objetos de tipo Scroll Pane no se muestra scrollbar vertical
Publicado por: mzamora60 en 07 de Enero 2016, 17:14
Buen dia. Por favor su valioso apoyo ya que tengo una aplicación que trabaja bien salvo al momento de querer utilizar los objetos de tipo Scroll Pane. La situación es la siguiente. Estoy trabajando en el editor grafico de netbeans y por necesidad de mi aplicación tengo que agregar un Scroll Pane para poder desplazarme a lo largo y ancho de una imagen una vez que ha sido llamada e insertada dentro del JLabel mi problema radica en que solo habílita la barra de desplazamiento horizontal (eje x ), más no puedo hacer que se habilite la barra vertical (eje y). realmente no lo estoy haciendo a base de código sino que solo arrastre el objeto Scroll Pane del pallet (editor grafico). Quien puede darme algún tip de porque no se habilita la barra de desplazamiento vertical pero si la horizontal ?.

Gracias por lo que se pueda hacer una vez más.

 :)
Título: Re:Java ejemplo uso de objetos de tipo Scroll Pane no se muestra scrollbar vertical
Publicado por: Alex Rodríguez en 09 de Enero 2016, 13:09
Hola la recomendación general es aprender a usar swing para generar los elementos gráficos a través de código. El uso de editores gráficos suele decirse que "ensucia" el código y a la la larga lo vuelve inmanejable e inentendible.

En los JScrollPane se establece la aparición de los scrolls verticales u horizantales usando estos métodos (aquí pongo el ejemplo del vertical):

public void setVerticalScrollBarPolicy(int policy)

El método determina cuándo las barras de scroll se mostrarán en el JScrollPane. Los valores permitidos para la barra vertical son:

    ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED
    ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER
    ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS

Donde as_needed indica que se mostrarán "cuando sea necesario", never que no se mostrarán nunca y always que se mostrarán siempre.

Si quieres que siempre aparezca la barra vertical tendrías que buscar esta propiedad y establecerla a always. Mediante código sería algo así como objeto.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS)

Nota: para usar esto tienes que escribir import javax.swing.ScrollPaneConstants;

Este es un ejemplo de código con JScrollPane aplicando esto:

Código: [Seleccionar]
import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

public class ScrollDemo extends JFrame {

  JScrollPane scrollpane;

  public ScrollDemo() {
    super("JScrollPane Demonstration");
    setSize(300, 200);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    init();
    setVisible(true);
  }

  public void init() {
    JRadioButton form[][] = new JRadioButton[12][5];
    String counts[] = { "", "0-1", "2-5", "6-10", "11-100", "101+" };
    String categories[] = { "Household", "Office", "Extended Family",
        "Company (US)", "Company (World)", "Team", "Will",
        "Birthday Card List", "High School", "Country", "Continent",
        "Planet" };
    JPanel p = new JPanel();
    p.setSize(600, 400);
    p.setLayout(new GridLayout(13, 6, 10, 0));
    for (int row = 0; row < 13; row++) {
      ButtonGroup bg = new ButtonGroup();
      for (int col = 0; col < 6; col++) {
        if (row == 0) {
          p.add(new JLabel(counts[col]));
        } else {
          if (col == 0) {
            p.add(new JLabel(categories[row - 1]));
          } else {
            form[row - 1][col - 1] = new JRadioButton();
            bg.add(form[row - 1][col - 1]);
            p.add(form[row - 1][col - 1]);
          }
        }
      }
    }
    scrollpane = new JScrollPane(p);
    scrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    getContentPane().add(scrollpane, BorderLayout.CENTER);
  }

  public static void main(String args[]) {
    new ScrollDemo();
  }
}

Saludos